IT源码网

安卓topbar编码实战讲解

shasha 2021年02月16日 手机开发 139 0

1.先在res->value下新建attrs.xml文件

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="topBar"> 
        <attr name="title" format="string"/> 
        <attr name="titleTextSize" format="dimension"/> 
        <attr name="titleTextColor" format="color"/> 
    </declare-styleable> 
</resources>

2.再编写组合布局,在layout下新建一个topbar.xml,左中右

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/topbar_root" 
 
    android:layout_width="match_parent" 
    android:layout_height="45dp"> 
 
    <Button 
        android:text="left" 
        android:layout_alignParentLeft="true" 
        android:layout_centerInParent="true" 
        android:id="@+id/topbar_leftbtn" 
        android:layout_width="wrap_content" 
        android:layout_height="match_parent" /> 
 
    <TextView 
        android:id="@+id/topbar_tv" 
        android:textStyle="bold" 
        android:layout_centerInParent="true" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" /> 
    <Button 
        android:id="@+id/topbar_rightbtn" 
        android:text="right" 
        android:layout_alignParentRight="true" 
        android:layout_centerInParent="true" 
        android:layout_width="wrap_content" 
        android:layout_height="match_parent" /> 
</RelativeLayout>

3.编写布局的加载类

package com.lingdangmao.demo_zidingyi_textview; 
 
import android.content.Context; 
import android.content.res.TypedArray; 
import android.graphics.Color; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.Button; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 
 
/** 
 * Created by Administrator on 2018/1/8. 
 */ 
 
public class Topbar extends RelativeLayout { 
 
    private Button topbarLeftBtn,topbarRightBtn; 
    private TextView topbarTextView; 
    private RelativeLayout topbar_root; 
    private int mColor= Color.BLUE; 
    private int mTextColor=Color.WHITE; 
    private String title; 
 
 
    public Topbar(Context context, AttributeSet attrs) { 
        super(context, attrs); 
        //获得从外面加载的数据 
        initTypedArray(context,attrs); 
        //初始化页面 
        initView(context); 
    } 
    private void initTypedArray(Context context, AttributeSet attrs){ 
        TypedArray ta =context.obtainStyledAttributes(attrs,R.styleable.topBar); 
        mTextColor = ta.getColor(R.styleable.topBar_titleTextColor,Color.WHITE); 
        title = ta.getString(R.styleable.topBar_title); 
        ta.recycle(); 
    } 
    private void initView(Context context){ 
        LayoutInflater.from(context).inflate(R.layout.topbar,this,true); 
        topbar_root =findViewById(R.id.topbar_root); 
        topbarLeftBtn = findViewById(R.id.topbar_leftbtn); 
        topbarRightBtn =findViewById(R.id.topbar_rightbtn); 
        topbarTextView =findViewById(R.id.topbar_tv); 
 
        //设置背景颜色 
        topbar_root.setBackgroundColor(mColor); 
        //设置文字颜色 
        topbarTextView.setTextColor(mTextColor); 
 
        //设置文字标题 
        setTitle(title); 
        //绑定事件 
        topbarLeftBtn.setOnClickListener(new OnClickListener() { 
            @Override 
            public void onClick(View view) { 
                Log.d("ww", "onClick111: "); 
                listener.OnleftBtnClick(); 
            } 
        }); 
    } 
 
    private void setTitle(String title){ 
        if(!title.isEmpty()){ 
            topbarTextView.setText(title); 
        } 
    } 
    private topbarOnClickListener listener; 
 
    public interface topbarOnClickListener{ 
        void OnleftBtnClick(); 
        void OnRightBtnClick(); 
    } 
    public void setTopbarClickListener(topbarOnClickListener listener){ 
        this.listener=listener; 
    } 
 
    public void setLeftOnClickListener(OnClickListener onClickListener){ 
        topbarLeftBtn.setOnClickListener(onClickListener); 
    } 
 
}

4.在mainactivity中使用

package com.lingdangmao.demo_zidingyi_textview; 
 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.LinearLayout; 
 
public class MainActivity extends AppCompatActivity { 
 
    private Topbar topbar; 
    private static final String TAG = "MainActivity"; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
        topbar  =findViewById(R.id.title); 
 
        topbar.setTopbarClickListener(new Topbar.topbarOnClickListener() { 
            @Override 
            public void OnleftBtnClick() { 
                Log.d(TAG, "OnleftBtnClick: "); 
            } 
            @Override 
            public void OnRightBtnClick() { 
 
            } 
        }); 
 
    } 
}

 

5.在主要布局中加载组合布局

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/main_root_ll" 
    tools:context="com.lingdangmao.demo_zidingyi_textview.MainActivity"> 
 
    <com.lingdangmao.demo_zidingyi_textview.Topbar 
        xmlns:app="http://schemas.android.com/apk/res-auto" 
        android:id="@+id/title" 
        app:title="自定义组合控件" 
        app:titleTextSize="20dp" 
        app:titleTextColor="#ff0038" 
        android:layout_width="match_parent" 
        android:layout_height="45dp"> 
 
    </com.lingdangmao.demo_zidingyi_textview.Topbar> 
 
 
</LinearLayout>

 最后完成的效果下图

 

发布评论

分享到:

IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

安卓titlebar的组合控件使用讲解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。