16

in un'attività, è possibile creare un LinearLayout di programmazione nel seguente modo:Come creare un layout di visualizzazione personalizzato a livello di codice?

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    LinearLayout ll = new LinearLayout(this); 
    ll.setOrientation(LinearLayout.VERTICAL); 
    ll.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 

    TextView tv1 = new TextView(this); 
    tv1.setText("HELLO"); 
    ll.addView(tv1); 

    TextView tv2 = new TextView(this); 
    tv2.setText("WORLD"); 
    ll.addView(tv2); 

    setContentView(ll); 
} 

Come si fa a fare la stessa all'interno di una visualizzazione personalizzata sottoclasse? Non ci sono setContentView o onCreate metodi ...

+0

potrebbe essere [questo uno] (http://stackoverflow.com/questions/14054197/how-to-get-the-name-of-textview-included-in-linear-layout-in-onclicklistener) –

+0

riferimento questo link http://stackoverflow.com/questions/14081339/how-can-i-declare-textview-as-global-variable-to-use-in-other-class/14081472#14081472 –

risposta

28

Va bene, ho scoperto un modo di farlo. Fondamentalmente, invece di sottoclassi direttamente la classe View, è necessario creare una sottoclasse della classe più alta che normalmente definirebbe in XML. Ad esempio, se la tua vista personalizzata ha bisogno di un LinearLayout come sua classe di massimo livello, la tua vista personalizzata dovrebbe semplicemente sottoclasse LinearLayout.

Ad esempio:

public class MyCustomView extends LinearLayout 
{ 
    public MyCustomView(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 

     setOrientation(LinearLayout.VERTICAL); 
     setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 

     TextView tv1 = new TextView(context); 
     tv1.setText("HELLO"); 
     addView(tv1); 

     TextView tv2 = new TextView(context); 
     tv2.setText("WORLD"); 
     addView(tv2); 
    } 
} 

Is sottoclasse LinearLayout un "hack"? Non per quanto posso vedere. Alcune sottoclassi Vista ufficiale fanno lo stesso, come NumberPicker e SearchView (anche se si gonfiano i loro layout da XML).

In base alla riflessione, è in realtà una risposta piuttosto ovvia.

+1

Risposta super, grazie! ! –

+1

molto interessante –

0

Se ho capito la tua domanda, è necessario utilizzare gonfiare, in questo modo:

public final class ViewHolder { 
     public TextView title; 
     public TextView artist; 
     public TextView duration; 
     public ImageView thumb_image; 
    //A class for the ViewHolder 

    } 

// Put this where you want to inflate this layout, could be a customlistview 
View view = getLayoutInflater().inflate(R.layout.your_layout, null); 
holder = new ViewHolder(); 
    holder.title = (TextView)view.findViewById(R.id.title); // title 
    holder.artist = (TextView)view.findViewById(R.id.artist); // artist name 
    holder.duration = (TextView)view.findViewById(R.id.duration); // duration 
    holder.thumb_image=(ImageView)view.findViewById(R.id.list_image); // thumb image 
Problemi correlati