Android 自定义控件之app标题栏的封装

时间:2023-03-08 19:29:49

在app的开发中,每一个页面都有上面的标题栏,总不能在开发的过程中没个界面都写一个标题栏的布局,所以为了开发的方便,将该标题栏进行的封装,以后在实际的开发工作中,也可以将该封装好的标题栏控件直接拿来使用,当然肯定是需要更改里面的布局文件的

Android 自定义控件之app标题栏的封装

下面贴出的是布局文件

<?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"
android:background="#F34B4E"
android:gravity="center_vertical" > <LinearLayout
android:id="@+id/llLeftGoBack"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:background="@drawable/widget_titlebar_selector"
android:clickable="true"
android:focusable="true"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingLeft="10dp"
android:paddingRight="15dp" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:clickable="false"
android:drawableLeft="@drawable/myapptitle_back"
android:drawablePadding="5dp"
android:focusable="false"
android:gravity="center"
android:text="返回"
android:textColor="#FFFFFF"
android:textSize="16sp" />
</LinearLayout> <LinearLayout
android:id="@+id/llRight"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_alignParentRight="true"
android:background="@drawable/widget_titlebar_selector"
android:clickable="true"
android:focusable="true"
android:orientation="horizontal"
android:paddingLeft="15dp"
android:paddingRight="15dp" > <ImageView
android:id="@+id/ivRightComplete"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:clickable="false"
android:focusable="false"
android:visibility="gone" /> <TextView
android:id="@+id/tvRightComplete"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:clickable="false"
android:focusable="false"
android:gravity="center"
android:text="完成"
android:textColor="#FFFFFF"
android:textSize="16sp"
android:visibility="visible" />
</LinearLayout> <TextView
android:id="@+id/tvCenterTitle"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_toRightOf="@id/llLeftGoBack"
android:layout_toLeftOf="@id/llRight"
android:ellipsize="end"
android:gravity="center"
android:singleLine="true"
android:text="标题"
android:textColor="#FFFFFF"
android:textSize="18sp" /> </RelativeLayout>

下面是贴出来封装好的类

package com.renrui.job.widget;

import com.renrui.job.R;
import com.renrui.job.util.Utility; import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView; /**
* My app title
**/
public class MyAppTitle extends LinearLayout
{
private OnLeftButtonClickListener mLeftButtonClickListener;
private OnRightButtonClickListener mRightButtonClickListener;
private MyViewHolder mViewHolder;
private View viewAppTitle; public MyAppTitle(Context context)
{
super(context); init();
} public MyAppTitle(Context context, AttributeSet attrs)
{
super(context, attrs); init();
} @TargetApi(Build.VERSION_CODES.HONEYCOMB)
public MyAppTitle(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle); init();
} private void init()
{
LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
viewAppTitle = inflater.inflate(R.layout.view_activity_titlebar, null);
this.addView(viewAppTitle, layoutParams); mViewHolder = new MyViewHolder(this);
mViewHolder.llLeftGoBack.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if (Utility.isFastDoubleClick())
{
return;
} if (mLeftButtonClickListener != null)
{
mLeftButtonClickListener.onLeftButtonClick(v);
}
}
});
mViewHolder.llRight.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if (Utility.isFastDoubleClick())
{
return;
} if (mRightButtonClickListener != null)
{
mRightButtonClickListener.OnRightButtonClick(v);
}
}
});
} public void initViewsVisible(boolean isLeftButtonVisile, boolean isCenterTitleVisile, boolean isRightIconVisile, boolean isRightTitleVisile)
{
// 左侧返回
mViewHolder.llLeftGoBack.setVisibility(isLeftButtonVisile ? View.VISIBLE : View.INVISIBLE); // 中间标题
mViewHolder.tvCenterTitle.setVisibility(isCenterTitleVisile ? View.VISIBLE : View.INVISIBLE); // 右侧返回图标,文字
if (!isRightIconVisile && !isRightTitleVisile)
{
mViewHolder.llRight.setVisibility(View.INVISIBLE);
}
else
{
mViewHolder.llRight.setVisibility(View.VISIBLE);
}
mViewHolder.ivRightComplete.setVisibility(isRightIconVisile ? View.VISIBLE : View.GONE);
mViewHolder.tvRightComplete.setVisibility(isRightTitleVisile ? View.VISIBLE : View.INVISIBLE);
} /**
* 设置标题
*
* @param title
*/
public void setAppTitle(String title)
{
if (!TextUtils.isEmpty(title))
{
mViewHolder.tvCenterTitle.setText(title);
}
} public void setRightTitle(String text)
{
if (!TextUtils.isEmpty(text))
{
mViewHolder.tvRightComplete.setText(text);
}
} public void setRightIcon(int sourceID)
{
mViewHolder.ivRightComplete.setImageResource(sourceID);
} public void setLeftOnclick(OnLeftButtonClickListener mOnLeftButtonClickListener)
{
if (mOnLeftButtonClickListener != null)
{
}
} public void setAppBackground(int color)
{
viewAppTitle.setBackgroundColor(color);
} public void setOnLeftButtonClickListener(OnLeftButtonClickListener listen)
{
mLeftButtonClickListener = listen;
} public void setOnRightButtonClickListener(OnRightButtonClickListener listen)
{
mRightButtonClickListener = listen;
} public static abstract interface OnLeftButtonClickListener
{
public abstract void onLeftButtonClick(View v);
} public static abstract interface OnRightButtonClickListener
{
public abstract void OnRightButtonClick(View v);
} static class MyViewHolder
{
LinearLayout llLeftGoBack;
TextView tvCenterTitle;
LinearLayout llRight;
ImageView ivRightComplete;
TextView tvRightComplete; public MyViewHolder(View v)
{
llLeftGoBack = (LinearLayout) v.findViewById(R.id.llLeftGoBack);
tvCenterTitle = (TextView) v.findViewById(R.id.tvCenterTitle);
llRight = (LinearLayout) v.findViewById(R.id.llRight);
ivRightComplete = (ImageView) v.findViewById(R.id.ivRightComplete);
tvRightComplete = (TextView) v.findViewById(R.id.tvRightComplete);
}
}
}

在使用中如何使用呢,接下来看在项目中  布局文件的引用

    <包名.MyAppTitle
android:id="@+id/myNewAppTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</包名.MyAppTitle>

下面是在activity中如何初始化该标题的代码

private void setMyAppTitle()
{
MyAppTitle mNewAppTitle = (MyAppTitle) this.findViewById(R.id.myNewAppTitle); mNewAppTitle.initViewsVisible(true, true, false, true); mNewAppTitle.setAppTitle(getString(R.string.toptitle_tool_MySuggestActivity));
mNewAppTitle.setRightTitle("提交");
mNewAppTitle.setOnLeftButtonClickListener(new OnLeftButtonClickListener()
{
@Override
public void onLeftButtonClick(View v)
{
onBackPressed();
}
}); mNewAppTitle.setOnRightButtonClickListener(new OnRightButtonClickListener()
{
@Override
public void OnRightButtonClick(View v)
{
//TODO
}
});
}

这就是全部的代码了 在这里贴出来  方便以后的学习