实现设置界面的UI,通常如下边的样式,使用RecycleView可以避免重复添加。
public class SettingItem {
//条目的类型
private SettingItemEnum itemEnum;
//条目的显示内容
private String itemLabel;
//前边的图标
@IntegerRes
private int itemIcon;
//具体的数值或者信息
private String itemNum;
//显示间隔
private boolean showInternal;
public SettingItem(SettingItemEnum itemEnum, String itemLabel, int itemIcon, String itemNum,boolean showInternal) {
this.showInternal = showInternal;
this.itemEnum = itemEnum;
this.itemLabel = itemLabel;
this.itemIcon = itemIcon;
this.itemNum = itemNum;
}
public boolean isShowInternal() {
return showInternal;
}
public void setShowInternal(boolean showInternal) {
this.showInternal = showInternal;
}
public SettingItemEnum getItemEnum() {
return itemEnum;
}
public void setItemEnum(SettingItemEnum itemEnum) {
this.itemEnum = itemEnum;
}
public String getItemLabel() {
return itemLabel;
}
public void setItemLabel(String itemLabel) {
this.itemLabel = itemLabel;
}
public int getItemIcon() {
return itemIcon;
}
public void setItemIcon(int itemIcon) {
this.itemIcon = itemIcon;
}
public String getItemNum() {
return itemNum;
}
public void setItemNum(String itemNum) {
this.itemNum = itemNum;
}
}
单个条目的分类。
Adapter使用了开源库:
https://github.com/CymChad/BaseRecyclerViewAdapterHelper
public class MainPageAdapter extends BaseQuickAdapter<SettingItem,BaseViewHolder> {
public MainPageAdapter (List<SettingItem> items) {
super(R.layout.setting_item_layout,items);
}
@Override
protected void convert(BaseViewHolder helper, SettingItem item) {
LinearLayout internal = helper.getView(R.id.setting_item_interval);
ImageView iv = helper.getView(R.id.setting_item_icon);
TextView tvLabel = helper.getView(R.id.tv_setting_item_label);
TextView tvNum = helper.getView(R.id.tv_setting_item_num);
ImageView ivArrow = helper.getView(R.id.iv_setting_arrow);
switch (item.getItemEnum()) {
case TYPE_MAIN_NO_ARROW:
case TYPE_MAIN_SHOW_ARROW:
if (item.getItemIcon() > 0) {
iv.setImageResource(item.getItemIcon());
}
tvNum.setVisibility(View.GONE);
if (item.getItemEnum() == SettingItemEnum.TYPE_MAIN_NO_ARROW) {
ivArrow.setVisibility(View.GONE);
}
if (item.getItemLabel() != null) {
tvLabel.setText(item.getItemLabel());
}
break;
case TYPE_SETTING:
iv.setVisibility(View.GONE);
if (item.getItemLabel() != null) {
tvLabel.setText(item.getItemLabel());
}
if (item.getItemNum() != null) {
tvNum.setText(item.getItemNum());
}
break;
default:
break;
}
if (item.isShowInternal()) {
internal.setVisibility(View.VISIBLE);
}else {
internal.setVisibility(View.GONE);
}
}
}
在主界面中引用即可:
item的布局如下:
<?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:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/dark_background">
<LinearLayout
android:id="@+id/setting_item_interval"
android:layout_width="match_parent"
android:layout_height="14dp"
android:background="@color/dark_background"
android:orientation="vertical">
</LinearLayout>
<android.support.constraint.ConstraintLayout
android:id="@+id/setting_item"
android:layout_width="match_parent"
android:layout_height="@dimen/padding_48"
android:background="@color/white">
<ImageView
android:id="@+id/setting_item_icon"
android:layout_width="@dimen/padding_19"
android:layout_height="@dimen/padding_19"
android:layout_marginStart="14dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_setting_item_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
tools:text="烘焙色标准"
android:textColor="@color/front_black"
android:textSize="@dimen/text_size15"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/setting_item_icon"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_setting_arrow"
android:layout_width="13dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="14dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_arrow" />
<TextView
android:id="@+id/tv_setting_item_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
tools:text="10min"
android:textSize="@dimen/text_size14"
android:textColor="@color/front_gray"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/iv_setting_arrow"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:layout_marginStart="@dimen/padding_15"
android:layout_marginEnd="@dimen/padding_15"
android:background="@color/roasting_centre_line"/>
</LinearLayout>