300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > android标题返回 【Android开发】自定义控件——带返回键标题栏

android标题返回 【Android开发】自定义控件——带返回键标题栏

时间:2023-03-11 22:27:59

相关推荐

android标题返回 【Android开发】自定义控件——带返回键标题栏

内容简概

一、预期效果

二、通过xml方式创建

三、通过代码创建

四、最终效果

具体内容

一、预期效果

二、通过xml方式创建

(一)自定义控件属性

首先我们需要创建一个管理自定义属性的xml文件。

然后在文件中规定我们想要实现的属性,颜色、文本和位置等都属于资源文件(resource)。

(二)创建控件

接着到activity_main.xml文件中调用自定义属性创建控件,采用RelativeLayout布局。

android:layout_width="match_parent"

android:layout_height="64dp"

app:my_background="#877466"

app:show_back="true"

app:back_title="返回主页"

app:back_position="1"/>

(三)实现自定义控件

最后在MainActivity中设置layout布局。自定义内容均在activity_main.xml文件中修改。

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

三、通过代码创建

(一)自定义控件属性

这一步过程与上述xml方式创建的第一步相同。

(二)创建控件

首先在图中位置新建一个用于创建控件的Java Class。

接着在创建的类中创建控件。

public class NavigationBar extends RelativeLayout {

// 定义一个变量保存外部设置的颜色 默认灰色

private int MyBackground = Color.GRAY;

// 记录是否需要返回按钮

private boolean show_back = false;

// 返回按钮

private Button back;

// 返回按钮的布局属性

LayoutParams params;

// 使用Java代码创建控件

public NavigationBar(Context context) {

// super(context);

// init();

this(context,null);

}

// 使用xml创建控件

public NavigationBar(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

init(context,attrs);

}

// 初始化控件

private void init(Context context, AttributeSet attr){

// 设置横向布局

// setOrientation(LinearLayout.HORIZONTAL);

// 设置背景

setBackgroundColor(Color.GRAY);

// 设置内容垂直居中

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);

// 是否需要标题

String title = typeArray.getString(R.styleable.NavigationBar_back_title);

// 取返回按钮的位置

int position = typeArray.getInteger(R.styleable.NavigationBar_back_position,1);

// 使用数据

setMyBackground(color);

setShow_back(show,title);

setPosition(position);

}

}

public int getMyBackground() {

return MyBackground;

}

public void setMyBackground(int myBackground) {

this.MyBackground = myBackground;

// 将外部传递过来的颜色 设置为背景颜色

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){

// 创建返回按钮

back = new Button(getContext());

// 设置按钮的布局属性

params = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

params.leftMargin = (int) (10*getResources().getDisplayMetrics().density);

// 设置标题

if(title != null){

back.setText(title);

}else {

back.setText("Back");

}

// 添加控件

addView(back,params);

}

}

/**

* 区别左右

*/

public interface myPosition{

int LEFT = 0;

int RIGHT = 1;

}

/**

* 设置按钮位置

* @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);

}

}

}

}

(三)实现自定义控件

最后在MainActivity中实例化对象。自定义内容均在test函数中修改。

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

test();

}

private void test(){

// 代码方式创建控件

NavigationBar bar = new NavigationBar(this);

// 设置背景颜色

bar.setBackgroundColor(Color.rgb(87,74,66));

// 设置返回按钮

bar.setShow_back(true,"返回主页");

// 设置显示的位置,0为左,1为右

bar.setPosition(0);

// 让当前这个控件作为activity的主视图

setContentView(bar);

}

}

四、最终效果

相同属性:

①show_back="true"

②back_title="返回主页"

③my_background="#877466"

不同属性:

①back_position="0" // 按钮在左边

②back_position="1" // 按钮在右边

(一)xml方式创建

(二)代码方式创建

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。