Autore Topic: Pulsante sotto label  (Letto 325 volte)

Offline Neoxxx

  • Translate Team
  • Utente junior
  • **
  • Post: 114
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Windows 7
Pulsante sotto label
« il: 24 Febbraio 2015, 18:09:48 CET »
0
Ciao a tutti, in una schermata ho una label e a fianco viene creato un pulsante...vorrei che il pulsante si trovasse sotto la label...non ho possibilità di usare xml solo codice java che riporto:

Codice: [Seleziona]
private View createView(final Link link) {
                final Context context = getContext();
                       
                LinearLayout linearLayout = new LinearLayout(context);
                linearLayout.setOrientation(LinearLayout.VERTICAL);
                linearLayout.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.TOP);
               
               
               
                linearLayout.setLayoutParams(new ViewGroup.LayoutParams(
                                ViewGroup.LayoutParams.MATCH_PARENT,
                                ViewGroup.LayoutParams.WRAP_CONTENT));

                button = new Button(context);
                button.setText(interactionManager.getString("apri"));
                button.setLayoutParams(new ViewGroup.LayoutParams(
                                ViewGroup.LayoutParams.MATCH_PARENT,
                                ViewGroup.LayoutParams.WRAP_CONTENT));
                button.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                                startBrowser();   
                        }
                });

Offline arlabs

  • Utente normale
  • ***
  • Post: 430
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Pulsante sotto label
« Risposta #1 il: 24 Febbraio 2015, 18:35:01 CET »
0
Hai rinunciato a rendere il testo cliccabile? :D

Cmq, per aggiungere una View (Button) ad una ViewGroup (LinearLayout) puoi usare il metodo addView (uno dei tanti).
Alternativamente puoi mettere il Button nel layout xml e impostare setVisibility( View.GONE ) per nasconderla senza fargli occupare spazio.

Ciao.

Offline Neoxxx

  • Translate Team
  • Utente junior
  • **
  • Post: 114
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Windows 7
Re:Pulsante sotto label
« Risposta #2 il: 24 Febbraio 2015, 18:38:46 CET »
0
Col pulsantone funziona quindi se non riesco a renderlo cliccabile utilizzo questo metodo.
La situazione del codice proposto è:

LINK    PULSANTE


Io vorrei invece mettere il pulsante sotto:

LINK

PULSANTE

ma non riesco  ???

Offline arlabs

  • Utente normale
  • ***
  • Post: 430
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Pulsante sotto label
« Risposta #3 il: 25 Febbraio 2015, 09:55:50 CET »
0
Dunque, nel codice proposto crei un LinearLayout (correttamente verticale) e un Button.
Però non hai copiato tutta la funzione. Non si vede la creazione della TextView, né le addView di Buttone e TextView, né il return della view.

Offline Neoxxx

  • Translate Team
  • Utente junior
  • **
  • Post: 114
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Windows 7
Re:Pulsante sotto label
« Risposta #4 il: 25 Febbraio 2015, 12:20:43 CET »
0
Eccolo, sorry dimenticanza mia

Codice: [Seleziona]
@Override
        public View create(VisualElement visualElement) {
                if (!(visualElement instanceof Link))
                        return createInternalErrorView();

                Link link = (Link) visualElement;
               
                Context context = getContext();

                LinearLayout linearLayout = new LinearLayout(context);
        linearLayout.setLayoutParams(new ViewGroup.LayoutParams(
                                ViewGroup.LayoutParams.MATCH_PARENT,
                                ViewGroup.LayoutParams.WRAP_CONTENT));

                String label = link.getLabel();       
                linkBrowser = label;
               
                if (label != null) {
                        TextView textView = new TextView(context);
                        textView.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
                        textView.setText(label);
                        textView.setSelected(true);
                        linearLayout.addView(textView);
                }
       
                if (label.startsWith("http://") || linkBrowser.startsWith("www.") || label.startsWith("https://"))
                        {linearLayout.addView(createView(link));
                        }
               
                return linearLayout;
        }

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 596
  • Respect: +133
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Pulsante sotto label
« Risposta #5 il: 25 Febbraio 2015, 13:33:06 CET »
0
Non mi sembra sia stato specificato l'orientamento.

Dopo

Codice (Java): [Seleziona]
linearLayout.setLayoutParams(...
Metti

Codice (Java): [Seleziona]
linearLayout.setOrientation(LinearLayout.VERTICAL);
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline arlabs

  • Utente normale
  • ***
  • Post: 430
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Pulsante sotto label
« Risposta #6 il: 25 Febbraio 2015, 15:35:36 CET »
0
Scusa, ma il nuovo pezzo di codice è in sostituzione del primo o in accompagnamento...?

perché sembrerebbe che nel nuovo estratto del codice tu crei un LinearLayout e nel caso sia un link tu chiami il pezzo di codice precedente creando un secondo LinearLayout.

Se è così, ti consiglio di semplificare tutto, ti serve un solo LinearLayout. Il LinearLayout è un ViewGroup che dovrebbe contenere sia la TextView che il Button.


Offline Neoxxx

  • Translate Team
  • Utente junior
  • **
  • Post: 114
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Windows 7
Re:Pulsante sotto label
« Risposta #7 il: 25 Febbraio 2015, 16:41:55 CET »
0
Nella create viene inserita la textView mentre nella create view  il pulsante..per quanto riguarda la struttura non posso cambiarla troppo perchè fa parte di un progetto che hanno tutti i moduli simili

Offline arlabs

  • Utente normale
  • ***
  • Post: 430
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Pulsante sotto label
« Risposta #8 il: 25 Febbraio 2015, 17:00:11 CET »
0
Resta il fatto che se vuoi che funzioni, devi mettere textView e Button nello stesso LinearLayout settato come vertical.

Cmq, manca ancora la parte finale del metodo createView.

Ciao.

Offline Neoxxx

  • Translate Team
  • Utente junior
  • **
  • Post: 114
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Windows 7
Re:Pulsante sotto label
« Risposta #9 il: 25 Febbraio 2015, 17:03:10 CET »
0
Ecco il codice completo:

Codice: [Seleziona]
public class LinkViewFactory extends AbstractViewFactory {
       
        private static final String TAG = "LinkViewFactory";
        protected Button button;
        protected String linkBrowser;
       
       
        public LinkViewFactory(InteractionManager interactionManager) {
                super(interactionManager);
        }

        @Override
        public View create(VisualElement visualElement) {
                if (!(visualElement instanceof Link))
                        return createInternalErrorView();

                Link link = (Link) visualElement;
               
                Context context = getContext();

                LinearLayout linearLayout = new LinearLayout(context);
        linearLayout.setLayoutParams(new ViewGroup.LayoutParams(
                                ViewGroup.LayoutParams.MATCH_PARENT,
                                ViewGroup.LayoutParams.WRAP_CONTENT));

                String label = link.getLabel();       
                linkBrowser = label;
               
                if (label != null) {
                        TextView textView = new TextView(context);
                        textView.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
                        textView.setText(label);
                        textView.setSelected(true);
                        linearLayout.addView(textView);
                }
       
                if (label.startsWith("http://") || linkBrowser.startsWith("www.") || label.startsWith("https://"))
                        {linearLayout.addView(createView(link));
                        }
               
                return linearLayout;
        }
       
       
        private View createView(final Link link) {
                final Context context = getContext();
                       
                LinearLayout linearLayout = new LinearLayout(context);
                linearLayout.setOrientation(LinearLayout.VERTICAL);
                linearLayout.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.TOP);
                linearLayout.setLayoutParams(new ViewGroup.LayoutParams(
                                ViewGroup.LayoutParams.MATCH_PARENT,
                                ViewGroup.LayoutParams.WRAP_CONTENT));

                button = new Button(context);
                button.setText(interactionManager.getString("avvia_browser"));
                button.setLayoutParams(new ViewGroup.LayoutParams(
                                ViewGroup.LayoutParams.WRAP_CONTENT,
                                ViewGroup.LayoutParams.WRAP_CONTENT));
                button.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                                startBrowser();    //Metodo che si avvia al premere del pulsante
                        }
                });

                linearLayout.addView(button);

                return linearLayout;
        }
               
               
        public void startBrowser() {
                if (!linkBrowser.startsWith("http://") && !linkBrowser.startsWith("https://"))
                        linkBrowser = "http://" + linkBrowser;
                Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(linkBrowser));
                getActivity().startActivity(browserIntent);
                       
        }
               

}


Ma se la textview la creo nella create e da li chiamo la createview che crea il pulsante non è la stessa cosa?

Offline arlabs

  • Utente normale
  • ***
  • Post: 430
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Pulsante sotto label
« Risposta #10 il: 25 Febbraio 2015, 17:31:45 CET »
0
Va benissimo, ma:

 - non ti serve il secondo LinearLayout che crei nella createView, puoi ritornare semplicemente il button
 - devi mettere (come ti ha già detto Ohmnibus) linearLayout.setOrientation(LinearLayout.VERTICAL) al primo linearLayout (quello nel metodo create). Tu l'hai messo solo al secondo che, contenendo una View sola, orizzontale o verticale, cambia poco.

Ciao.