gpt4 book ai didi

android - 如何包装首选项标题? (真的)

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:37:40 29 4
gpt4 key购买 nike

请不要将我指向How to wrap preference title?因为它不适用于(正如我评论的那样)您使用 @strings/ 的情况对 strings.xml 文件的引用。

如果你使用

android:title="@string/some_string"

然后放

<string name="some_string">the string I want \n to wrap</string>

进入strings.xml\n被忽略。

最佳答案

对于大多数 Android 版本,没有公开的 API 允许在首选项标题上换行。这会导致中长标题文本截断/褪色的不幸常见错误,尤其是在纵向的小屏幕设备上:

<PreferenceScreen
android:key="my_pref_key"
android:title="A Long Preference Title that should wrap to multiple lines" />

Before - Single-line preference titles, in Holo and Material Theme

但是有两种方法可以解决它:

<强>1。简单的方法 - 但这仅适用于 Android 8 (API 26) 及更高版本:

使用android:singleLineTitle="false"像这样:

<PreferenceScreen
android:key="my_pref_key"
android:title="A Long Preference Title that should wrap to multiple lines"
<b>android:singleLineTitle="false"</b> />

<强>2。困难的方法 - 自定义首选项子布局 - 这适用于所有 Android 版本:

对于具有长标题的首选项,请在其上使用自定义布局 ( like this ),其中 TextView 已明确关闭单行文本。但是您必须以编程方式设置布局,因为 Android 4(Holo 主题)和 Android 5 及更高版本(Material 主题)之间的主题不同。

SettingsFragment.javaSettingsActivity.java:

PreferenceScreen myPreferenceItem = (PreferenceScreen)
getPreferenceScreen().findPreference("my_pref_key");

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
myPreferenceItem.
setLayoutResource(R.layout.preference_child_material_customized);
} else {
myPreferenceItem.
setLayoutResource(R.layout.preference_child_holo_customized);
}

After - Multi-line preference titles, in Holo and Material Theme

res/layout/preference_child_material_customized.xml 示例:

从您的 Android SDK/platforms/android-22/data/res/layout/复制此文件preference_child_material.xml ( like this one ) 并对其进行自定义:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">

<LinearLayout
android:id="@+android:id/icon_frame"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:minWidth="40dip"
android:gravity="start|center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+android:id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dip" />
</LinearLayout>

<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingTop="16dip"
android:paddingBottom="16dip">

<TextView android:id="@+android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="false"
android:textAppearance="?android:attr/textAppearanceListItem" />

<TextView android:id="@+android:id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@android:id/title"
android:layout_alignStart="@android:id/title"
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:attr/textColorSecondary"
android:maxLines="10" />

</RelativeLayout>

<!-- Preference should place its actual preference widget here. -->
<LinearLayout android:id="@+android:id/widget_frame"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:minWidth="58dip"
android:gravity="end|center_vertical"
android:orientation="vertical" />

</LinearLayout>

注意 TextView 上的行 android:singleLine="false"

对于 res/layout/preference_child_holo_customized.xml,您应该从您的 Android SDK/platforms/android-19/data/res/layout/复制它preference_child.xmlpreference_child_holo.xml ( like this one ) 并以类似的方式自定义它。

关于android - 如何包装首选项标题? (真的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19616238/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com