หน้าส่วนใหญ่ในการตั้งค่ารถยนต์มีการใช้งานเป็นชุด
ส่วนย่อยที่ขยาย SettingsFragment
โดยแต่ละคนมีการกำหนดกิจกรรมของตนเองใน CarSettingActivities
กิจกรรมแบบคงที่เหล่านี้ขยายมาจาก BaseCarSettingsActivity
นอกจากการตั้งค่าเหล่านี้แล้ว คุณยังสามารถแทรกค่ากำหนดจากแอประบบอื่นๆ เพื่อ
ก็จะปรากฏใน CarSettings
เพิ่มค่ากำหนดใหม่ในการตั้งค่ารถยนต์
วิธีเพิ่มการตั้งค่าใหม่
- ระบุไฟล์ XML
- ตรวจสอบว่าค่ากำหนดทั้งหมดกำหนด
android:key
แล้ว รายการ ของคีย์จะคงอยู่ในpreference_keys.xml
ค่ากำหนด คีย์ต้องไม่ซ้ำกัน - สำหรับวัตถุประสงค์ในการจัดทำดัชนีการค้นหา หน้าจอค่ากำหนดควรมี
android:key
ที่กำหนดไว้ รายการแป้นหน้าจอค่ากำหนด มีการบำรุงรักษาในpreference_screen_keys.xml
ค่ากำหนด คีย์บนหน้าจอต้องไม่ซ้ำกันด้วย - หากค่ากำหนดแสดงข้อมูลคงที่เท่านั้น (ตัวอย่างเช่น
ไม่มีตรรกะทางธุรกิจพิเศษ) ตั้งค่าตัวควบคุมค่ากำหนดเป็น
com.android.car.settings.common.DefaultRestrictionsPreferenceController
- หากค่ากำหนดต้องใช้ตรรกะทางธุรกิจ ให้ตั้งค่ากำหนด ใหม่ด้วยชื่อตัวควบคุมค่ากำหนดใหม่
- ตรวจสอบว่าค่ากำหนดทั้งหมดกำหนด
- (หากจำเป็น) สร้างตัวควบคุมค่ากำหนดใน
แพ็กเกจ ซึ่งขยายวันที่
PreferenceController
ดู Javadoc หากจำเป็น - สร้างส่วนย่อยที่มี
getPreferenceScreenResId
ซึ่งแสดงผลค่า ไฟล์ XML ที่กำหนดไว้ในขั้นตอนที่ 1 - สร้างกิจกรรมใน
CarSettingActivities
ที่ขยาย วันที่BaseCarSettingsActivity
แล้วใช้getInitialFragment()
โดยแสดงผลส่วนย่อย ที่กำหนดไว้ในขั้นตอนที่ 3 - อัปเดต
AndroidManifest.xml
เพื่อรวมกิจกรรมที่กำหนดไว้ในขั้นตอนที่ 4
ตัวอย่าง
เอกสารต่อไปนี้แสดงให้เห็นถึงขั้นตอนนี้
- กำหนดไฟล์ XML ชื่อ
demo_fragment.xml
: วันที่<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/demo_label"
android:key="@string/psk_demo">
<Preference
android:icon="@drawable/ic_settings_demo_preference_1"
android:key="@string/pk_demo_preference_1"
android:title="@string/demo_preference_1_title"
settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController">
<intent android:targetPackage="com.android.car.settings"
android:targetClass="com.android.car.settings.common.CarSettingActivities$DemoSetting1Activity"/>
</Preference>
<Preference
android:icon="@drawable/ic_settings_demo_preference_2"
android:key="@string/pk_demo_preference_2"
android:title="@string/demo_preference_2_title"
settings:controller="com.android.car.settings.example.MyCustomRestrictionsPreferenceController">
<intent android:targetPackage="com.android.car.settings"
android:targetClass="com.android.car.settings.common.CarSettingActivities$DemoSetting2Activity"/>
</Preference>
</PreferenceScreen> - เพิ่มคีย์ค่ากำหนดใน
preference_keys
: วันที่<resources>
[...]
<string name="pk_demo_preference_1" translatable="false">demo_preference_1</string>
<string name="pk_demo_preference_2" translatable="false">demo_preference_2</string>
</resources> - เพิ่มคีย์หน้าจอค่ากำหนดใน
preference_screen_keys.xml
: วันที่<resources>
[...]
<string name="psk_demo" translatable="false">demo_screen</string>
</resources>สำหรับค่ากําหนดตัวอย่างแรก ให้ใช้
DefaultRestrictionsPreferenceController
สำหรับค่ากำหนดที่ 2 ให้ใช้ตัวควบคุมค่ากำหนดที่กำหนดเอง ซึ่งจำเป็นต้องกำหนด สำหรับตัวอย่างนี้ คุณจะปรับแต่งค่ากำหนดนี้ให้กับผู้ใช้ที่ดูแลระบบที่มีอยู่ได้เท่านั้น โดยกำหนดตัวควบคุมที่กำหนดเองต่อไปนี้public class MyCustomRestrictionsPreferenceController extends
PreferenceController<Preference> {
private final UserManager mUserManager;
public MyCustomRestrictionsPreferenceController(Context context, String
preferenceKey, FragmentController fragmentController,
CarUxRestrictions uxRestrictions) {
super(context, preferenceKey, fragmentController, uxRestrictions);
mUserManager = UserManager.get(context);
}
@Override
protected Class<Preference> getPreferenceType() {
return Preference.class;
}
@Override
public int getAvailabilityStatus() {
return mUserManager.isAdminUser() ? AVAILABLE : DISABLED_FOR_USER;
}
} - หากต้องการสร้างส่วนย่อย ให้ลบล้าง
getPreferenceScreenResId
ดังนี้ - หากต้องการเก็บส่วนย่อยใหม่ ให้สร้างกิจกรรมใน
CarSettingActivities
: - อัปเดตไฟล์ Manifest ด้วยกิจกรรมใหม่ดังนี้
- ไม่มีการใช้งานในแอป CarSettings โดยตรง (เช่น การแทรกการตั้งค่าที่ OEM ใช้งาน)
- ควรปรากฏในแอป CarSettings
- หากต้องการทำเครื่องหมายกิจกรรมเป็นการตั้งค่าที่แทรกเข้ามา ให้เพิ่มตัวกรอง Intent ลงใน กิจกรรมนั้น
- บอกให้แอป CarSettings ทราบว่าคุณอยู่ในหมวดหมู่ใด หมวดหมู่คือ
ค่าคงที่ที่กำหนดใน
CategoryKey
และใช้เพื่อระบุว่าการตั้งค่าที่แทรกไว้ใน CarSettings ในระดับใด จะปรากฏขึ้น เรามีชุดหมวดหมู่อยู่ภายในCategoryKey
แต่ไม่มีข้อจำกัดสำหรับ OEM ในการนิยาม หมวดหมู่ของตนเอง - (ไม่บังคับ) เพิ่มข้อความสรุปเมื่อการตั้งค่าปรากฏขึ้น
<activity android:name="Settings$DemoSettingsActivity"
<!-- Mark the activity as an injected setting -->
<intent-filter>
<action android:name="com.android.settings.action.EXTRA_SETTINGS"/>
</intent-filter>
<!-- Tell CarSettings app which category it belongs to -->
<meta-data android:name="com.android.settings.category"
android:value="com.android.settings.category.demo_category"/>
<!-- Tell CarSettings the what the preference title should be -->
<meta-data android:name="com.android.settings.title"
android:value="@string/app_name" />
<!-- Optional: specify the icon to show with the preference -->
<meta-data android:name="com.android.settings.icon"
android:resource="@drawable/ic_demo"
android:value="true"/>
<!-- Optional: Add a summary text when the string is displayed -->
<meta-data android:name="com.android.settings.summary"
android:resource="@string/demo_summary"/>
</activity>
public class DemoFragment extends SettingsFragment {
@Override
@XmlRes
protected int getPreferenceScreenResId() {
return R.xml.demo_fragment;
}
}
public class CarSettingActivities {
[...]
public static class DemoActivity extends BaseCarSettingsActivity {
@Nullable
@Override
protected Fragment getInitialFragment() {
return new DemoFragment();
}
}
}
<application
[...]
<activity
android:name=".common.CarSettingActivities$DemoActivity"
android:exported="true">
<meta-data android:name="distractionOptimized" android:value="true"/>
</activity>
[...]
</application>
เพิ่มค่ากำหนด Intent ภายนอกในการตั้งค่ารถยนต์
นอกจากค่ากำหนดที่แทรกเข้ามาแล้ว คุณยังอาจ จะใส่ค่ากำหนดลงในการตั้งค่ารถยนต์โดยตรง แอปอื่น ซึ่งทำได้ง่ายๆ ด้วยการเพิ่มค่ากำหนด ไปยังหน้าจอค่ากำหนดที่มีการดำเนินการผ่าน Intent ซึ่งตรงกับคำขอภายนอก แอป ค่ากำหนดเหล่านี้เช่นเดียวกับค่ากำหนดอื่นๆ ในการตั้งค่ารถยนต์ มีแอตทริบิวต์ XML เดียวกัน
<Preference
android:key="@string/pk_demo_preference"
android:title="@string/demo_preference_title"
android:summary="@string/demo_preference_summary"
settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController">
<intent android:action="android.intent.action.DEMO_ACTION"/>
</Preference>
เพิ่มค่ากำหนดที่แทรก
ค่ากำหนดที่แทรกเข้ามามี Intent ที่นำไปสู่ภายนอกหรือภายใน กิจกรรม ตัวอย่างเช่น รายการการตั้งค่า Google ในการตั้งค่า หน้าแรกเป็นค่ากำหนดที่แทรกไว้ ค่ากำหนดที่แทรกเข้ามานั้น มีประโยชน์เมื่อรายการใดรายการหนึ่งต่อไปนี้เป็นจริง การตั้งค่า
วิธีกำหนดค่ากิจกรรมเป็นการตั้งค่าที่แทรกไว้
หากต้องการให้การตั้งค่าที่แทรกไว้ปรากฏในหน้าที่เฉพาะเจาะจงใน แอป CarSettings ให้รวมโค้ดตัวอย่างต่อไปนี้ใน XML โดยทำการแก้ไข ตามที่เหมาะสม
<com.android.car.settings.common.LogicalPreferenceGroup
<!-- Replace key string -->
android:key="@string/pk_system_extra_settings"
<!-- Indicates the preferences in the group should be injected in.
ExtraSettingsPreferenceController contains the logic to pull in injected
preferences. -->
settings:controller="com.android.settings.common.ExtraSettingsPreferenceController">
<!-- Tells the controller what activities should be pulled into this preference
group. -->
<intent android:action="com.android.settings.action.EXTRA_SETTINGS">
<!-- Name and value should match the metadata in your activity -->
<extra android:name="com.android.settings.category"
android:value="com.android.settings.category.demo_category"/>
</intent>
</com.android.car.settings.common.LogicalPreferenceGroup>