zoukankan      html  css  js  c++  java
  • 【Android-布局复用】 多个界面复用一个布局文件(一)

    1.layout_common.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="wrap_content"
        android:orientation="horizontal" >
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1" />
    
        <Button
            android:id="@+id/common_button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮1" />
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1" />
    
        <Button
            android:id="@+id/common_button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮2" />
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1" />
    
        <Button
            android:id="@+id/common_button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮3" />
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1" />
    
    </LinearLayout>

    2.layout_main.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" >
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_margin="16dp"
            android:layout_weight="1" >
        </RelativeLayout>
    
        <!-- 在布局文件中引用复用的布局文件 -->
    
        <include layout="@layout/layout_common" />
    
    </LinearLayout>

    3.CommonView.java

    复用布局文件实例化。单独封装,接口回调。 避免重复写布局文件,避免重复实例化控件,避免重复设置监听方法

    package com.example.mytestapp;
    
    import android.app.Activity;
    import android.content.Context;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    /**
     * 复用布局文件实例化
     */
    public class CommonView implements OnClickListener {
    
        // 接口
        public interface OnCommonViewClick {
            public void onButton1Click(View v);
    
            public void onButton2Click(View v);
    
            public void onButton3Click(View v);
        }
    
        public void setListener(OnCommonViewClick listener) {
            this.listener = listener;
        }
    
        Context mContext;
        OnCommonViewClick listener;
    
        public CommonView(Context context) {
            this.mContext = context;
        }
    
        public Button button1, button2, button3;
    
        public CommonView init() {
            button1 = (Button) ((Activity) mContext).findViewById(R.id.common_button1);
            button2 = (Button) ((Activity) mContext).findViewById(R.id.common_button2);
            button3 = (Button) ((Activity) mContext).findViewById(R.id.common_button3);
            button1.setOnClickListener(this);
            button2.setOnClickListener(this);
            button3.setOnClickListener(this);
            return this;
        }
    
        @Override
        public void onClick(View v) {
            if (listener == null)
                return;
            switch (v.getId()) {
            case R.id.common_button1:
                listener.onButton1Click(v);
                break;
            case R.id.common_button2:
                listener.onButton2Click(v);
                break;
            case R.id.common_button3:
                listener.onButton3Click(v);
                break;
            default:
                break;
            }
        }
    
    }

    4.MainActivity.java

    主界面实例化

    package com.example.mytestapp;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Toast;
    
    /*
     * 问题:
     * 1.如何用代码改变控件的文字或颜色?
     */
    
    public class MainActivity extends Activity implements CommonView.OnCommonViewClick {
    
        int clickTimes = 0;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.layout_main);
            // 在这里实例化布局文件, 并实现监听接口方法
            // 只需要一行代码就可以直接完成复用代码块的实例化
            new CommonView(this).init().setListener(this);
        }
    
        @Override
        public void onButton1Click(View v) {
            clickTimes++;
            // 在这里实现对应点击事件的方法
            Toast.makeText(this, "你点击了button" + clickTimes + "次", Toast.LENGTH_SHORT).show();
    
        }
    
        @Override
        public void onButton2Click(View v) {
            // 在这里实现对应点击事件的方法
        }
    
        @Override
        public void onButton3Click(View v) {
            // 在这里实现对应点击事件的方法
        }
    
    }
  • 相关阅读:
    codeforces Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) C. Constellation
    codeforces Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) B Guess the Permutation
    codeforces Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) A Slime Combining(栈)
    在服务器IIS中添加新网站后打开网站需要用户名和密码时怎么办?
    简易通讯录
    先列出所有数据库,再删除其中一个数据库。
    数据库创建mysql_query($sql,$link)
    显示所有数据库 mysql_fetch_object()
    读取数据库数据
    PHP警告错误处理办法
  • 原文地址:https://www.cnblogs.com/Sukie-s-home/p/7527333.html
Copyright © 2011-2022 走看看