2017-02-01 15 views
1

私はこのようなレイアウトの作成:その後編集カスタムビューをプログラム

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/rlMenu" 
    android:layout_centerHorizontal="true" 
    android:gravity="center" 
    android:layout_centerVertical="true"> 

    <RelativeLayout 
     android:background="@drawable/dark_rectangle_bord" 
     android:id="@+id/rl1dia" 
     android:elevation="10dp" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_width="@dimen/sizeCard" 
     android:layout_height="@dimen/sizeCard" 
     android:layout_marginBottom="@dimen/padding_bottom_cards" 
     android:layout_marginEnd="@dimen/padding_end_cards" 
     android:layout_marginRight="@dimen/padding_end_cards" 
     android:layout_marginLeft="@dimen/padding_start_cards" 
     android:layout_marginStart="@dimen/padding_start_cards" 
     android:layout_marginTop="@dimen/padding_top_cards"> 

     <TextView 
      android:text="1º Dia" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/tv1dia" 
      android:textStyle="normal|bold" 
      android:textColor="@color/Branco" 
      android:layout_alignParentBottom="true" 
      android:padding="10dp" 
      android:textSize="@dimen/texto_pequeno" 
      android:gravity="center" 
      android:fontFamily="sans-serif" 
      android:layout_centerHorizontal="true"/> 

     <ImageView 
      app:srcCompat="@drawable/ic_calendario_1" 
      android:id="@+id/iv1dia" 
      android:layout_width="@dimen/sizeImage" 
      android:layout_height="@dimen/sizeImage" 
      android:layout_centerHorizontal="true" 
      android:layout_alignParentTop="true" 
      /> 

を、私は私のMainActivityでそれを含めていました。

<include 
    android:id="@+id/my_custom_view" 
    layout="@layout/custom_view></include> 

しかし、このカスタムビューでRelativeLayoutImageViewTextViewがあります。以下のようにサンプルを動的に作成する必要があります。

このカスタムビューをプログラムで作成するにはどうすればよいですか? 例:

Button bt = new Button(MainActivity.this); 

そして、どのように私はTextViewRelativeLayout、背景とプログラム的ImageViewを変更できますか?ように:

CustomView cv = new CustomView(MainActivity.this); 
    cv.setImage(R.drawable.chips); 
    cv.setRlBackground(Color.WHITE); 
    cv.setText("Hello, World!"); 
+0

にあなたは直接mainactivityでレイアウトを作成していないどこかにそれを作ると、それを含める必要があります。 –

答えて

1

あなたはその

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View mView = (View) inflater.inflate(R.layout.custom_view, null); 
    View email = (View) mView.findViewById(R.id.email); 
    yourParentView.addView(mView); 

ためLayoutInflaterを使用しかし、あなたはyourParentView

1

の親呼び出しremoveAllview()方法にビューを追加するときたぶん、あなたは、実際のカスタムを作成することを確認することができますView、includeを使用するとカスタムViewは作成されませんが、その特定のxmlだけレイアウトに挿入されます。だから、クラス(この場合はRelativeLayoutを拡張しますが、あなたがここに合ったものを使用することができます)

public class CustomView extends RelativeLayout { 

    private TextView textView; 
    private ImageView imageView; 

    public CustomView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     inflate(context, R.layout.custom_view, this); 

     imageView = (ImageView) findViewById(R.id.image_view); 
     textView = (TextView) findViewById(R.id.text_view); 
    } 

    public void setImage(int resId){ 
     imageView.setImageResource(resId); 
    } 

    public void setText(String text){ 
     textView.setText(text); 
    } 
} 

カスタムビュー(custom_view.xml)のレイアウトのXMLを作成して、あなたは以来mergeの代わりincludeを使用する場合がありますあなたは既に

<?xml version="1.0" encoding="utf-8"?> 
<merge xmlns:android="http://schemas.android.com/apk/res/android"> 
    <TextView 
     android:id="@+id/text_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     /> 
    <ImageView 
     android:id="@+id/image_view" 
     android:layout_width="48dp" 
     android:layout_height="48dp" 
     /> 
</merge> 

親レイアウト(この場合は RelativeLayout)を持っている。このような Activityレイアウトにカスタムビューを追加し、あなたが使用しているカスタム Viewクラスの完全な名前を使用する必要があることに注意してください、この場合 com.example.lelloman.dummy.CustomView

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin"> 

    <com.example.lelloman.dummy.CustomView 
     android:id="@+id/custom_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

</RelativeLayout> 

とあなたのActivity

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.my_activity); 

    CustomView customView = (CustomView) findViewById(R.id.custom_view); 
    customView.setImage(R.drawable.some_icon); 
    customView.setText("Hello world"); 
} 
関連する問題