加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

通用顶部自定义控件 可在XML自定义属性

发布时间:2020-12-16 09:05:40 所属栏目:百科 来源:网络整理
导读:直接上代码 自定义控件的主体内容 package com.x2l.onlineedu.mid.object;import android.annotation.SuppressLint;import android.content.Context;import android.content.res.TypedArray;import android.util.AttributeSet;import android.view.LayoutInf

直接上代码 自定义控件的主体内容

package com.x2l.onlineedu.mid.object;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.x2l.onlineedu.mid.R;

public class TopLayout extends LinearLayout {

	private Context mContext;
	private ImageView v_left;
	private View v_main;
	private ImageView v_right;
	private TextView tv;
	TopLayOutClickListener topLayOutClickListener;

	public TopLayout(Context context) {
		super(context);
		mContext = context;
	}

	public TopLayout(Context context,AttributeSet attrs) {
		super(context,attrs);
		mContext = context;
		init(attrs);

	}

	/**
	 * 功  能:载入在Xml中设置的内容<br>
	 * 时  间:2015年6月17日 下午2:21:07<br>
	 * 注  意:<br>
	 * 
	 * @param attrs
	 */
	private void init(AttributeSet attrs) {

		TypedArray a = mContext.obtainStyledAttributes(attrs,R.styleable.TopLayout);
		int left_Src = a.getResourceId(R.styleable.TopLayout_leftImage_src,R.drawable.ic_app);
		int right_Src = a.getResourceId(R.styleable.TopLayout_rightImage_Visiable,R.drawable.ic_app);
		int left_Visiable = a.getInt(R.styleable.TopLayout_leftImage_Visiable,View.VISIBLE);
		int top_background = a.getResourceId(R.styleable.TopLayout_layout_background,R.drawable.top_main);
		String str = a.getString(R.styleable.TopLayout_text);
		int right_Visiable = a.getInt(R.styleable.TopLayout_rightImage_Visiable,View.VISIBLE);
		int text_Visiable = a.getInt(R.styleable.TopLayout_text_Visiable,View.VISIBLE);

		v_main = LayoutInflater.from(mContext).inflate(R.layout.toplayout,this,true);
		v_left = (ImageView) v_main.findViewById(R.id.top_layout_leftbtn);
		v_right = (ImageView) v_main.findViewById(R.id.top_layout_rightbtn);
		tv = (TextView) v_main.findViewById(R.id.top_layout_text);
		v_left.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				if (topLayOutClickListener != null) {
					topLayOutClickListener.LeftBtnClick();
				}
			}
		});
		v_right.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				if (topLayOutClickListener != null) {
					topLayOutClickListener.RightBtnClick();
				}
			}
		});
		v_main.setBackgroundResource(top_background);
		v_left.setImageResource(left_Src);
		v_left.setVisibility(left_Visiable);
		v_right.setImageResource(right_Src);
		v_right.setVisibility(right_Visiable);
		tv.setText(str);
		tv.setVisibility(text_Visiable);

	}

	@SuppressLint("NewApi")
	public TopLayout(Context context,AttributeSet attrs,int defStyle) {
		super(context,attrs,defStyle);
		mContext = context;
	}

	public interface TopLayOutClickListener {
		void LeftBtnClick();

		void RightBtnClick();

	}

	public void setTopLayoutClickListener(TopLayOutClickListener clickListener) {
		this.topLayOutClickListener = clickListener;
	}

}

自定义控件相应的View toplayout.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="match_parent" >

    <ImageView
        android:id="@+id/top_layout_leftbtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="@dimen/top_text_margin_leftright" />

    <TextView
        android:id="@+id/top_layout_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/white"
        android:layout_centerInParent="true"
        android:textSize="@dimen/top_text_size" />

    <ImageView
        android:id="@+id/top_layout_rightbtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="@dimen/top_text_margin_leftright" />

</RelativeLayout>

可以在XMl自定义属性中定义的项目 必须在 attr中定义
  <!-- 通用 自定义控件  最顶部的提示栏  -->
    <declare-styleable name="TopLayout">
        <attr name="leftImage_src" format="reference"></attr>
        <attr name="rightImage_src" format="reference"></attr>
        <attr name="layout_background" format="reference"></attr>
        <attr name="text" format="string"></attr>
        <attr name="leftImage_Visiable">
            <enum name="visiable" value="0x00000000"></enum>
            <enum name="gone" value="0x00000008"></enum>
            <enum name="invisiable" value="0x00000004"></enum>
        </attr>
        <attr name="rightImage_Visiable">
            <enum name="visiable" value="0x00000000"></enum>
            <enum name="gone" value="0x00000008"></enum>
            <enum name="invisiable" value="0x00000004"></enum>
        </attr>
        <attr name="text_Visiable">
            <enum name="visiable" value="0x00000000"></enum>
            <enum name="gone" value="0x00000008"></enum>
            <enum name="invisiable" value="0x00000004"></enum>
        </attr>
    </declare-styleable>


使用上自定义控件的地方 testlayout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:topview="http://schemas.android.com/apk/res/com.x2l.onlineedu.mid"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <com.x2l.onlineedu.mid.object.TopLayout
        android:id="@+id/tixian_edit_password_topview"
        android:layout_width="match_parent"
        android:layout_height="@dimen/top_height"
        topview:layout_background="@drawable/top_main"
        topview:leftImage_src="@drawable/back"
        topview:rightImage_Visiable="gone"
        topview:text="提现" >
    </com.x2l.onlineedu.mid.object.TopLayout>

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/edit_background"
        android:hint="请输入账号登陆密码" />

    <ImageView
        android:id="@+id/tixian_edit_password_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/tixian_edit_password_btn" />

</LinearLayout>

注意:在使用自定义的控件有时候会报 No resource identifier found for attribute ‘XXX’ in package等错误

解决方法:命名空间后面的包名应该是AndroidManifest.xml文件中定义的package包名,而不是使用的这个自定义控件所处的包的包名。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读