android标题返回,【Android开发】自定义控件——带返回键标题栏
內(nèi)容簡(jiǎn)概
一、預(yù)期效果
二、通過xml方式創(chuàng)建
三、通過代碼創(chuàng)建
四、最終效果
具體內(nèi)容
一、預(yù)期效果
二、通過xml方式創(chuàng)建
(一)自定義控件屬性
首先我們需要?jiǎng)?chuàng)建一個(gè)管理自定義屬性的xml文件。
然后在文件中規(guī)定我們想要實(shí)現(xiàn)的屬性,顏色、文本和位置等都屬于資源文件(resource)。
(二)創(chuàng)建控件
接著到activity_main.xml文件中調(diào)用自定義屬性創(chuàng)建控件,采用RelativeLayout布局。
android:layout_width="match_parent"
android:layout_height="64dp"
app:my_background="#877466"
app:show_back="true"
app:back_title="返回主頁(yè)"
app:back_position="1"/>
(三)實(shí)現(xiàn)自定義控件
最后在MainActivity中設(shè)置layout布局。自定義內(nèi)容均在activity_main.xml文件中修改。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
三、通過代碼創(chuàng)建
(一)自定義控件屬性
這一步過程與上述xml方式創(chuàng)建的第一步相同。
(二)創(chuàng)建控件
首先在圖中位置新建一個(gè)用于創(chuàng)建控件的Java Class。
接著在創(chuàng)建的類中創(chuàng)建控件。
public class NavigationBar extends RelativeLayout {
// 定義一個(gè)變量保存外部設(shè)置的顏色 默認(rèn)灰色
private int MyBackground = Color.GRAY;
// 記錄是否需要返回按鈕
private boolean show_back = false;
// 返回按鈕
private Button back;
// 返回按鈕的布局屬性
LayoutParams params;
// 使用Java代碼創(chuàng)建控件
public NavigationBar(Context context) {
// super(context);
// init();
this(context,null);
}
// 使用xml創(chuàng)建控件
public NavigationBar(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context,attrs);
}
// 初始化控件
private void init(Context context, AttributeSet attr){
// 設(shè)置橫向布局
// setOrientation(LinearLayout.HORIZONTAL);
// 設(shè)置背景
setBackgroundColor(Color.GRAY);
// 設(shè)置內(nèi)容垂直居中
setGravity(Gravity.TOP);
// 判斷是否是XML配置的
if (attr != null){
// 從attr里提取xml里面配置的所有屬性
TypedArray typeArray = context.obtainStyledAttributes(attr,R.styleable.NavigationBar);
// 提取需要的屬性
int color = typeArray.getColor(R.styleable.NavigationBar_my_background, Color.rgb(87,74,66));
// 是否需要返回按鈕
boolean show = typeArray.getBoolean(R.styleable.NavigationBar_show_back,false);
// 是否需要標(biāo)題
String title = typeArray.getString(R.styleable.NavigationBar_back_title);
// 取返回按鈕的位置
int position = typeArray.getInteger(R.styleable.NavigationBar_back_position,1);
// 使用數(shù)據(jù)
setMyBackground(color);
setShow_back(show,title);
setPosition(position);
}
}
public int getMyBackground() {
return MyBackground;
}
public void setMyBackground(int myBackground) {
this.MyBackground = myBackground;
// 將外部傳遞過來的顏色 設(shè)置為背景顏色
setBackgroundColor(MyBackground);
}
public boolean isShow_back() {
return show_back;
}
public void setShow_back(boolean show_back,String title) {
this.show_back = show_back;
if (show_back == true){
// 創(chuàng)建返回按鈕
back = new Button(getContext());
// 設(shè)置按鈕的布局屬性
params = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.leftMargin = (int) (10*getResources().getDisplayMetrics().density);
// 設(shè)置標(biāo)題
if(title != null){
back.setText(title);
}else {
back.setText("Back");
}
// 添加控件
addView(back,params);
}
}
/**
* 區(qū)別左右
*/
public interface myPosition{
int LEFT = 0;
int RIGHT = 1;
}
/**
* 設(shè)置按鈕位置
* @param position LEFT RIGHT
*/
public void setPosition(int position){
// 判斷是否有back按鈕
if (back != null){
if (position == myPosition.LEFT){
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
}else {
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
}
}
}
}
(三)實(shí)現(xiàn)自定義控件
最后在MainActivity中實(shí)例化對(duì)象。自定義內(nèi)容均在test函數(shù)中修改。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
test();
}
private void test(){
// 代碼方式創(chuàng)建控件
NavigationBar bar = new NavigationBar(this);
// 設(shè)置背景顏色
bar.setBackgroundColor(Color.rgb(87,74,66));
// 設(shè)置返回按鈕
bar.setShow_back(true,"返回主頁(yè)");
// 設(shè)置顯示的位置,0為左,1為右
bar.setPosition(0);
// 讓當(dāng)前這個(gè)控件作為activity的主視圖
setContentView(bar);
}
}
四、最終效果
相同屬性:
①show_back="true"
②back_title="返回主頁(yè)"
③my_background="#877466"
不同屬性:
①back_position="0" // 按鈕在左邊
②back_position="1" // 按鈕在右邊
(一)xml方式創(chuàng)建
(二)代碼方式創(chuàng)建
總結(jié)
以上是生活随笔為你收集整理的android标题返回,【Android开发】自定义控件——带返回键标题栏的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言第一课程序代码怎么打,【北北的小程
- 下一篇: 编个笑话超市怪谈怎么过 编个笑话超市怪谈