2011-11-08 15 views
6

Android dünyasında yeniyim .... Birisi beni düzeltirse çok iyi bir yardımcı olacak ... aşağıdaki kodu yanlış yapıyorum ...Görünüm sınıfını genişleten ve düzen xml dosyasını kullanan örnek kod

  • Gereksinim: Uygulama aktivitelerimde aynı görünümün kullanılması için özel bir Görünüm (xml düzen dosyası kullanarak) oluşturmanız gerekir. İşte ben

cutomviewxml.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Large Text" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 
</LinearLayout> 

Genişletilmiş Görünüm sınıf ... kod ...

mycustomTextview.java i üzerinde çalışıyorum örnek kod ile gitmek

public class mycustomTextview extends View { 

    private View mView; 
    Context mycontext; 

    public mycustomTextview(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     // TODO Auto-generated constructor stub 

    this.mycontext = context; 

    LayoutInflater inflater; 
    inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    mView = inflater.inflate(R.layout.cutomviewxml, null); 
    } 

Activity main.xml dosya

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 


    <com.motorola.mycustomTextview 
     android:id="@+id/customtextview" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/textView2" 
     android:layout_marginLeft="143dp" 
     android:layout_marginTop="69dp" 
     android:layout_toRightOf="@+id/textView1" /> 

</RelativeLayout> 

Etkinlik sınıfı sample.java ..

public class sample extends Activity{ 

    private static final String LOG_TAG = "sampleActivity"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.i(LOG_TAG,"OnCreate of sampleActivity"); 
     setContentView(R.layout.main); 
} 
} 

cevap

5

Ben size çok ViewGroup geçmek zorunda düzeninizi şiştiğinde, bu çizgiyi

mView = inflater.inflate(R.layout.cutomviewxml, this); 
3

kullanın Bu xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
     <yourpackagename.viewclassname android:id="@+id/myView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"></yourpackagename.viewclassname> 
</LinearLayout> 
+0

+1 kullanabilirsiniz mycustomTextview, içinde küçük bir hata yapmış düşünüyorum. Teşekkürler, gerçekten yardımcı oldu. Buna kızıyordum :) –

4

özel iç görünümleri erişim elde etmek için view onFinishInflate() yöntemini geçersiz kıl ve findViewById() öğesini kullanın. Eldeki problem için çözüm aşağıdaki gibi olacaktır.

public class mycustomTextview extends LinearLayout { 

    Context mycontext; 
    private TextView textView1; 

    public mycustomTextview(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     this.mycontext = context; 
    } 

    @Override 
    protected void onFinishInflate() { 
     textView1=(TextView) findViewById(R.id.textView1); 
    } 
} 
0
public class ExampleView extends FrameLayout { 

     ImageView mImage; 

     public ExampleView(Context context) { 
      super(context); 
      init(context); 
     } 

     public void init(Context context) { 
      View view = inflate(context, R.layout.my_view_layout,this); 
      view.findViewById(R.id.image) 
     } 
} 
İlgili konular