来自plattform源的select_dialog_singlechoice_material.xml布局使用android:checkMarkGravity =“start”属性:
<?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.
-->
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?android:attr/textColorAlertDialogListItem"
android:gravity="center_vertical"
android:paddingStart="@dimen/alert_dialog_padding_material"
android:paddingEnd="@dimen/alert_dialog_padding_material"
android:checkMark="?android:attr/listChoiceIndicatorSingle"
android:checkMarkGravity="start"
android:ellipsize="marquee" />
但是我无法在项目中使用此属性,因为我收到以下错误:
错误:(15)在'android'包中找不到属性'checkMarkGravity'的资源标识符
是否可以某种方式使用此属性?我正在为api 21编译,所以这应该没关系:
minSdkVersion 21
targetSdkVersion 21
答案 0 :(得分:0)
我不知道这个属性是否正确但在官方文档中不存在:http://developer.android.com/intl/es/reference/android/widget/CheckedTextView.html
无论如何,该值出现在此文件中的相同项目中(第2052行): https://github.com/android/platform_frameworks_base/blob/59701b9ba5c453e327bc0e6873a9f6ff87a10391/core/res/res/values/symbols.xml
答案 1 :(得分:0)
这是对的。代码实际上使用它,但编译器不允许使用它。代码在多个地方都有它,这里是初始化的地方:
public CheckedTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
....
mCheckMarkGravity = a.getInt(R.styleable.CheckedTextView_checkMarkGravity, Gravity.END);
并且,在Android的布局XML文件中使用的示例位于“preference_material.xml”中:
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?android:attr/textColorAlertDialogListItem"
android:gravity="center_vertical"
android:paddingStart="?attr/dialogPreferredPadding"
android:paddingEnd="?attr/dialogPreferredPadding"
android:checkMark="?android:attr/listChoiceIndicatorSingle"
android:checkMarkGravity="start"
android:ellipsize="marquee" />
我已经写过关于此问题的here,希望Google会将其发布给所有人使用。
答案 2 :(得分:0)
一段时间以来,checkMarkGravity在CheckedTextView中的默认设置为END。 到目前为止,CheckedTextView的单选和多选XML文件尚未设置检查标记属性。这是我在前者中看到的,例如:
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/listPreferredItemHeightSmall"
android:textAppearance="?attr/textAppearanceMedium"
android:textColor="?attr/textColorAlertDialogListItem"
android:gravity="center_vertical"
android:paddingStart="@dimen/select_dialog_padding_start_material"
android:paddingEnd="?attr/dialogPreferredPadding"
android:drawableStart="?attr/listChoiceIndicatorSingle"
android:drawablePadding="@dimen/select_dialog_drawable_padding_start_material"
android:ellipsize="marquee" />
所以复选标记显示在左侧的原因是复选标记drawable为null,而实际上是设置了drawableStart。如果要将自己的XML用于列表行,则可以设置选中标记。
我只在选择题中发现了这个问题。就我而言,单选按钮(单选)确实显示在末尾,但是复选框模式在开始时显示。通过设置对话框多选项目的布局,可以通过以下方法解决此问题:
<style name="AlertDialogTheme" parent="ThemeOverlay.MaterialComponents.MaterialAlertDialog">
<item name="alertDialogStyle">@style/AlertDialogStyle</item>
</style>
<style name="AlertDialogStyle" parent="MaterialAlertDialog.MaterialComponents">
<item name="multiChoiceItemLayout">@layout/common_dialog_multichoice_row</item>
</style>
这是布局文件:
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/listPreferredItemHeightSmall"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?attr/textColorAlertDialogListItem"
android:gravity="center_vertical"
android:paddingStart="@dimen/abc_select_dialog_padding_start_material"
android:paddingEnd="?attr/dialogPreferredPadding"
android:checkMark="@drawable/checkmark_selector"
android:drawablePadding="20dp"
android:ellipsize="marquee" />
其中checkmark_selector必须是有状态可绘制的。我使用了一个自定义,但您也可以像原始文件一样使用主题的?attr / listChoiceIndicatorSingle。