自定义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("米饭");
            }
        });

猜你喜欢

转载自blog.csdn.net/yangtan_tanbaobao/article/details/84856601