安卓Lollipop系统中,设备上的偏好设置图标未能居中。

5
我已经使用android:icon为ListPreference添加了一个图标,但在Lollipop或Marshmallow设备上,该图标被放置在可用空间的左侧,而不是像早期版本的设备一样居中显示。以下是示例图片:

早期版本的设备 (api 18 - JB 4.3),应该是这样的!

enter image description here

Lollipop及以上版本 (api 23 - MM),图标没有居中显示。

enter image description here

PreferenceScreen

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory android:title="@string/general">

        <ListPreference
            android:defaultValue="@string/pref_languages_default"
            android:entries="@array/languages"
            android:entryValues="@array/listLangValues"
            android:icon="@drawable/translate"
            android:key="language"
            android:title="@string/languages" />

    </PreferenceCategory>

</PreferenceScreen>

翻译.xml 图像资源

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="24dp"
    android:width="24dp"
    android:viewportWidth="24"
    android:viewportHeight="24">
    <path android:fillColor="#fff" android:pathData="M12.87,15.07L10.33,12.56L10.36,12.53C12.1,10.59 13.34,8.36 14.07,6H17V4H10V2H8V4H1V6H12.17C11.5,7.92 10.44,9.75 9,11.35C8.07,10.32 7.3,9.19 6.69,8H4.69C5.42,9.63 6.42,11.17 7.67,12.56L2.58,17.58L4,19L9,14L12.11,17.11L12.87,15.07M18.5,10H16.5L12,22H14L15.12,19H19.87L21,22H23L18.5,10M15.88,17L17.5,12.67L19.12,17H15.88Z" />
</vector>

我该如何在LL或MM上将其居中显示?


有更新吗?你成功解决了这个问题吗? - filipproch
没有,我没有成功修复这个问题。 - Arjen de Jong
2个回答

1
我已经花了一整天的时间试图解决同样的问题。最终我设置了每个偏好设置的布局为默认布局的修改版本。我将图像视图填充从-4dp更改为0dp,并将icon_frame的最小宽度从60dp更改为56dp。
这绝对不是理想的解决方案,但现在可以使用。
因此,
将偏好设置布局添加到首选项屏幕中的ListPreference:
<ListPreference
        android:defaultValue="@string/pref_languages_default"
        android:entries="@array/languages"
        android:entryValues="@array/listLangValues"
        android:icon="@drawable/translate"
        android:key="language"
        android:title="@string/languages"
        android:layout="@layout/my_preference"            
        />

并创建布局\my_preference.xml:
<?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2014 The Android Open Source Project

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<android.support.v7.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/activatedBackgroundIndicator"
android:clipToPadding="false"
android:gravity="center_vertical"
android:minHeight="?attr/listPreferredItemHeightSmall"
android:orientation="horizontal"
android:paddingEnd="?attr/listPreferredItemPaddingRight"
android:paddingLeft="?attr/listPreferredItemPaddingLeft"
android:paddingRight="?attr/listPreferredItemPaddingRight"
android:paddingStart="?attr/listPreferredItemPaddingLeft"
tools:ignore="NewApi">

<android.support.v7.widget.LinearLayoutCompat
    android:id="@+id/icon_frame"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="0dp"
    android:layout_marginStart="0dp"
    android:gravity="start|center_vertical"
    android:minWidth="56dp"
    android:orientation="horizontal"
    android:paddingBottom="4dp"
    android:paddingEnd="12dp"
    android:paddingRight="12dp"
    android:paddingTop="4dp">

    <android.support.v7.widget.AppCompatImageView
        android:id="@+android:id/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxHeight="48dp"
        android:maxWidth="48dp" />
</android.support.v7.widget.LinearLayoutCompat>

<RelativeLayout
    android:layout_width="0px"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:paddingBottom="16dp"
    android:paddingTop="16dp">

    <android.support.v7.widget.AppCompatTextView
        android:id="@android:id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?attr/textAppearanceListItem"
        tools:text="title" />

    <android.support.v7.widget.AppCompatTextView
        android:id="@android:id/summary"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@android:id/title"
        android:layout_alignStart="@android:id/title"
        android:layout_below="@android:id/title"
        android:textAppearance="?android:attr/textAppearanceListItemSecondary"
        android:textColor="?android:attr/textColorSecondary"
        tools:text="summary" />
</RelativeLayout>

<!-- Preference should place its actual preference widget here. -->
<android.support.v7.widget.LinearLayoutCompat
    android:id="@android:id/widget_frame"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:gravity="end|center_vertical"
    android:orientation="vertical"
    android:paddingLeft="16dp"
    android:paddingStart="16dp" />

再次强调,这绝对不是正确的解决方案,但它是一种解决方案。希望能有所帮助。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接