天天看點

自定義LinearLayout

日常開發中,類似圖檔的布局非常常見,如果每次都要使用linearLayout或者其他布局包含子控件去實作的話,代碼重複量大,是以我們可以用自定義布局去實作。

自定義LinearLayout

方法一

1.建立一個布局檔案item_ly.xml

<?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="50dp"
    >
    <TextView
        android:id="@+id/content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16dp"
        android:text="城市"
        android:layout_marginLeft="10dp"
        android:layout_centerVertical="true"
        />

    <TextView
        android:id="@+id/select"
        android:layout_toRightOf="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:drawableRight="@mipmap/red_shangla"
        android:layout_marginRight="20dp"
        android:text="請點選選擇"
        android:drawablePadding="20dp"
        android:gravity="right"
        android:layout_centerVertical="true" />
    <View
        android:id="@+id/divider_view"
        android:background="#000000"
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:layout_alignParentBottom="true"
        />
</RelativeLayout>

           

1.建立一個類MyLinearLayout.java

public class MyLinearLayout {
    private Activity activity;
    private LyClickListener lyClickListener;
    private TextView selectTV;
    private TextView contentTV;
    public interface LyClickListener{
        void clickLy(View view);
    }

    public void init(Activity activity,String content){
        this.activity = activity;
        selectTV = (TextView) activity.findViewById(R.id.select);
        contentTV = (TextView) activity.findViewById(R.id.content);

    }

    public void setClickEvent(LyClickListener lyListener){
        lyClickListener = lyListener;
        selectTV.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(lyClickListener != null){
                    lyClickListener.clickLy(v);
                }
            }
        });
    }

    public void setData(String msg){
        if(selectTV != null){
            selectTV.setText(msg);
        }
    }
}
           

3.使用方法

1>在activity_main.xml中include

<include
	       android:id="@+id/city_ly"
	       layout="@layout/item_ly"
	       />
           
2>在MainActivity.java中
           
MyLinearLayout myLinearLayout = new MyLinearLayout();
       //給左邊指派
        myLinearLayout.init(MainActivity.this,"城市");
        myLinearLayout.setClickEvent(new MyLinearLayout.LyClickListener() {
            @Override
            public void clickLy(View view) {
               //點選的時候改變右邊的資料
                myLinearLayout.setData("西安");
            }
        });
           

方法二

1.建立布局檔案item_ly.xml(參照方法一)

2.自定義LinearLayout:

public class SelectLinearLayout extends LinearLayout {
    private TextView content;
    private TextView select;
    public SelectLinearLayout(Context context) {
        super(context);
    }

    public SelectLinearLayout(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        LayoutInflater.from(context).inflate(R.layout.item_ly, this);

        content = (TextView) findViewById(R.id.content);
        select = (TextView) findViewById(R.id.select);
    }

    public void setContent(String food){
        if(content != null){
            content.setText(food);
        }
    }

    public void setData(String food){
        if(select != null) {
            select.setText(food);
        }
    }
}

           

3.在activity_main.xml裡面寫布局:

<com.example.yangtan.myviewdemo.SelectLinearLayout
      android:id="@+id/food_ly"
      android:layout_width="match_parent"
      android:layout_height="50dp" />
           

4.在MainActivity.java中使用:

SelectLinearLayout  selectLinearLayout = (SelectLinearLayout) findViewById(R.id.food_ly);
        selectLinearLayout.setContent("食品");//給左邊指派
        //點選改變右邊的值
        selectLinearLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                selectLinearLayout.setData("米飯");
            }
        });
           

繼續閱讀