今天参照网上的例子,添加了设置界面的跳转,并完善了使用悬浮按钮的体验

新建xml文件夹中的settings.xml

  <?xml version="1.0" encoding="utf-8"?>
  <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout="@layout/preference_item"
  android:title="设置"
  >
  <PreferenceCategory
      android:layout="@layout/preference_category_widget"
      android:title="预留设置分级标题">
      <CheckBoxPreference
          android:title="CheckBox标题"
          android:summary="CheckBox设置具体内容"
          android:layout="@layout/preference_item"/>
      <CheckBoxPreference
          android:title="标题"
          android:summary="设置具体内容"
          android:layout="@layout/preference_item"
          android:widgetLayout="@layout/switch_layout"/>

      <Preference
          android:layout="@layout/preference_item"
          android:title="预留设置项标题"
          android:summary="预留设置具体内容要比标题长点"/>
  </PreferenceCategory>
  <PreferenceCategory
      android:layout="@layout/preference_category_widget"
      android:title="更多">
      <Preference
          android:title="版本"
          android:summary="V1.0"
          android:layout="@layout/preference_item"/>

      <Preference
          android:layout="@layout/preference_item"
          android:title="关于"
          android:summary="About the appliacation"/>
      </PreferenceCategory>
  </PreferenceScreen>

设置分级标题 preference_category_widget.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
    android:id="@android:id/title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="8dp"
    android:paddingTop="16dp"
    android:textColor="@color/colorPrimary"
    android:text="indroduce"
    android:textSize="14sp" />
</LinearLayout>

设置内容布局 preference_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:padding="16dp">
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1">
    <TextView
        android:id="@android:id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="marquee"
        android:fadingEdge="horizontal"
        android:singleLine="true"
        android:text="title"
        android:textSize="16sp" />
    <TextView
        android:id="@android:id/summary"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@android:id/title"
        android:text="summary"
        android:textColor="#AAAAAA"
        android:textSize="13sp" />
</RelativeLayout>
<LinearLayout
    android:id="@android:id/widget_frame"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right|center_vertical"
    android:orientation="vertical"/>
</LinearLayout>

效果:

SettingsActivity

public class SettingsActivity extends AppCompatActivity {
    Toolbar mToolbar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings_toolbar);
    initToolbar();
    getFragmentManager().beginTransaction().replace(R.id.content_frame, new SettingsFragment()).commit();
    }
    private void initToolbar() {
        mToolbar = (Toolbar) findViewById(R.id.settings_toolbar);
        mToolbar.setTitle("设置");
        mToolbar.setTitleTextColor(Color.WHITE);
        setSupportActionBar(mToolbar);
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.setHomeAsUpIndicator(R.drawable.ic_arrow_back);
            actionBar.setDisplayHomeAsUpEnabled(true);
        }
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:   //action bar
            Intent intent=new Intent(SettingsActivity.this,MainActivity.class);
            startActivity(intent);
            return true;
        }
        return false;
    }
    @Override
    public void onBackPressed() {
        Intent intent=new Intent(SettingsActivity.this,MainActivity.class);
        startActivity(intent);
    }
}

值得注意

  1. activity_main_drawer.xml中group表示只有其中一个按钮可以被同时点击,这样就会使该按钮被点击时触发被点击的动画效果(背景色变深),所以要把settings这个按钮单独分出来,因为其打开了一个新的activity,否则返回mainactivity时settings按钮还是按下的状态
  2. 在开发过程中出现了SettingsActivity打开后状态栏呈现白色,发现是values/styles/styles.xml(v21)里的问题,把第五行改成想要的颜色即可

    <resources>
    <style name="AppTheme.NoActionBar">
     <item name="windowActionBar">false</item>
     <item name="windowNoTitle">true</item>
     <item name="android:statusBarColor">@color/blue_dark</item>
    </style>
    </resources>
  3. 可以在清单中为activity添加 android:launchMode="singleTask" 这一句,是其不会被重复创建实例
  4. 获取非本activity绑定的布局中的控件可以这样:

    View view = View.inflate(getApplicationContext(), R.layout.popup_window null);
    button = (Button)view.findViewById(R.id.button);
  5. 悬浮按钮点击子按钮收回

    fab_menu.collapse();
  6. 为设置的组件设定key值进行存储
Last modification:July 21st, 2020 at 10:49 pm