创建一个设置activity

当toolbar上溢出菜单(overflow menu)的settings选项被点击时,需要打开一个新的Activity。所以首先要做的事情时需要一个新的SettingActivity

  1. class SettingsActivity : AppCompatActivity() {
  2. override fun onCreate(savedInstanceState: Bundle?) {
  3. super.onCreate(savedInstanceState)
  4. setContentView(R.layout.activity_settings)
  5. setSupportActionBar(toolbar)
  6. supportActionBar.setDisplayHomeAsUpEnabled(true)
  7. }
  8. override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
  9. android.R.id.home -> { onBackPressed(); true }
  10. else -> false
  11. }
  12. }

当用户离开这个界面的时我们需要保存用户preference(偏好),所以我们需要像处理Back一样处理Up动作,重定向动作到onBackPressed。现在,让我们要创建一个XML布局。对于这个preference来说一个简单EditText就足够了:

  1. <FrameLayout
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent">
  5. <include layout="@layout/toolbar"/>
  6. <LinearLayout
  7. android:orientation="vertical"
  8. android:layout_width="match_parent"
  9. android:layout_height="match_parent"
  10. android:layout_marginTop="?attr/actionBarSize"
  11. android:padding="@dimen/spacing_xlarge">
  12. <TextView
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:text="@string/city_zipcode"/>
  16. <EditText
  17. android:id="@+id/cityCode"
  18. android:layout_width="match_parent"
  19. android:layout_height="wrap_content"
  20. android:hint="@string/city_zipcode"
  21. android:inputType="number"/>
  22. </LinearLayout>
  23. </FrameLayout>

然后只需要在AndroidManifest.xml中声明这个activity:

  1. <activity
  2. android:name=".ui.activities.SettingsActivity"
  3. android:label="@string/settings"/>