API 8 中启用图标时 ListView 项目不显示文本
ListView item doesn't show text when icon enable in API 8
我在 API 8 设备 中的 ListView
项 有一个非常奇怪的错误。我有一个非常简单的文件对话框布局:
它在 API 15 的设备上工作正常。但是 HTC Desire API 8 将此对话框显示为:
所以我只能看到没有文件夹图标的元素(文件)的文本。 我只有在滚动列表时才能看到文件夹文本!
当我用 setVisibility(View.INVISIBLE)
隐藏图标时,文字随处可见。
我的适配器的一些代码:
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
if (viewBinder == null)
{
return super.getView(position, convertView, parent);
}
else
{
View view = convertView == null
? viewBinder.inflateView(position, mResource, mInflater, parent)
: convertView;
viewBinder.setViewValue(view, position, getItem(position));
return view;
}
}
public View inflateView(final int position, final int defResource,
final LayoutInflater inflater, final ViewGroup parent) {
final boolean checkable =
isCheckable((T) getListAdapter().getItem(position));
final View view = inflater.inflate(checkable ?
R.layout.filepicker_listitem_checkable :
R.layout.filepicker_listitem_dir,
parent, false);
ViewHolder viewHolder = new ViewHolder();
viewHolder.icon = view.findViewById(R.id.item_icon);
viewHolder.text =
(TextView) view.findViewById(android.R.id.text1);
if (checkable) {
viewHolder.checkbox = (CheckedTextView) view
.findViewById(android.R.id.text1);
} else {
viewHolder.checkbox = null;
}
view.setTag(viewHolder);
return view;
}
public void setViewValue(final View view, final int position,
final T data) {
if (view.getTag() == null) {
return;
}
((ViewHolder) view.getTag()).text.setText(getName(data));
((ViewHolder) view.getTag()).icon.setVisibility(isDir(position, data) ? View.VISIBLE : View.GONE);
if (((ViewHolder) view.getTag()).checkbox != null) {
((ViewHolder) view.getTag()).checkbox
.setChecked(checkedItems.get(position));
}
}
更新:
filepicker_listitem_checkable.xml
<LinearLayout
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="?android:listPreferredItemHeight"
xmlns:android="http://schemas.android.com/apk/res/android"
android:minHeight="?android:listPreferredItemHeight"
android:orientation="horizontal"
android:background="@drawable/selectable_background_filepickertheme">
<ImageView
android:id="@+id/item_icon"
android:src="@drawable/ic_collections_collection_light"
android:visibility="visible"
android:layout_width="wrap_content"
android:layout_height="match_parent"
tools:ignore="ContentDescription"
android:adjustViewBounds="true"/>
<CheckedTextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
style="?android:textAppearanceLarge"
android:checked="false"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
android:padding="8dp"
android:gravity="center_vertical"
android:id="@android:id/text1"
android:maxLines="1"
android:ellipsize="end"
android:singleLine="true"/>
filepicker_listitem_dir.xml:
<LinearLayout
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="?android:listPreferredItemHeight"
xmlns:android="http://schemas.android.com/apk/res/android"
android:minHeight="?android:listPreferredItemHeight"
android:orientation="horizontal"
android:background="@drawable/selectable_background_filepickertheme">
<ImageView
android:id="@+id/item_icon"
android:src="@drawable/ic_collections_collection_light"
android:visibility="visible"
android:layout_width="wrap_content"
android:layout_height="match_parent"
tools:ignore="ContentDescription"
android:adjustViewBounds="true"/>
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
style="?android:textAppearanceLarge"
android:padding="8dp"
android:gravity="center_vertical"
android:id="@android:id/text1"
android:maxLines="1"
android:ellipsize="end"
android:singleLine="true"
android:text="@string/name"/>
在第一个示例中,文本似乎是黑色背景的白色,而在第二个示例中,文本是白色背景,没有 tex 。我的猜测是文本在那里,但它是白色的,所以它是不可见的。尝试将 TextView
颜色更改为黑色,或您想要的任何颜色,看看是否有所不同。尝试将以下内容添加到您的 TextView
布局中:android:textColor="@color/black"
另外我修复了这个错误!只需将 android:background="@android:color/transparent"
添加到列表项布局中的 TextView
和 CheckedTextView
元素。
我在 API 8 设备 中的 ListView
项 有一个非常奇怪的错误。我有一个非常简单的文件对话框布局:
它在 API 15 的设备上工作正常。但是 HTC Desire API 8 将此对话框显示为:
所以我只能看到没有文件夹图标的元素(文件)的文本。 我只有在滚动列表时才能看到文件夹文本!
当我用 setVisibility(View.INVISIBLE)
隐藏图标时,文字随处可见。
我的适配器的一些代码:
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
if (viewBinder == null)
{
return super.getView(position, convertView, parent);
}
else
{
View view = convertView == null
? viewBinder.inflateView(position, mResource, mInflater, parent)
: convertView;
viewBinder.setViewValue(view, position, getItem(position));
return view;
}
}
public View inflateView(final int position, final int defResource,
final LayoutInflater inflater, final ViewGroup parent) {
final boolean checkable =
isCheckable((T) getListAdapter().getItem(position));
final View view = inflater.inflate(checkable ?
R.layout.filepicker_listitem_checkable :
R.layout.filepicker_listitem_dir,
parent, false);
ViewHolder viewHolder = new ViewHolder();
viewHolder.icon = view.findViewById(R.id.item_icon);
viewHolder.text =
(TextView) view.findViewById(android.R.id.text1);
if (checkable) {
viewHolder.checkbox = (CheckedTextView) view
.findViewById(android.R.id.text1);
} else {
viewHolder.checkbox = null;
}
view.setTag(viewHolder);
return view;
}
public void setViewValue(final View view, final int position,
final T data) {
if (view.getTag() == null) {
return;
}
((ViewHolder) view.getTag()).text.setText(getName(data));
((ViewHolder) view.getTag()).icon.setVisibility(isDir(position, data) ? View.VISIBLE : View.GONE);
if (((ViewHolder) view.getTag()).checkbox != null) {
((ViewHolder) view.getTag()).checkbox
.setChecked(checkedItems.get(position));
}
}
更新: filepicker_listitem_checkable.xml
<LinearLayout
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="?android:listPreferredItemHeight"
xmlns:android="http://schemas.android.com/apk/res/android"
android:minHeight="?android:listPreferredItemHeight"
android:orientation="horizontal"
android:background="@drawable/selectable_background_filepickertheme">
<ImageView
android:id="@+id/item_icon"
android:src="@drawable/ic_collections_collection_light"
android:visibility="visible"
android:layout_width="wrap_content"
android:layout_height="match_parent"
tools:ignore="ContentDescription"
android:adjustViewBounds="true"/>
<CheckedTextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
style="?android:textAppearanceLarge"
android:checked="false"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
android:padding="8dp"
android:gravity="center_vertical"
android:id="@android:id/text1"
android:maxLines="1"
android:ellipsize="end"
android:singleLine="true"/>
filepicker_listitem_dir.xml:
<LinearLayout
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="?android:listPreferredItemHeight"
xmlns:android="http://schemas.android.com/apk/res/android"
android:minHeight="?android:listPreferredItemHeight"
android:orientation="horizontal"
android:background="@drawable/selectable_background_filepickertheme">
<ImageView
android:id="@+id/item_icon"
android:src="@drawable/ic_collections_collection_light"
android:visibility="visible"
android:layout_width="wrap_content"
android:layout_height="match_parent"
tools:ignore="ContentDescription"
android:adjustViewBounds="true"/>
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
style="?android:textAppearanceLarge"
android:padding="8dp"
android:gravity="center_vertical"
android:id="@android:id/text1"
android:maxLines="1"
android:ellipsize="end"
android:singleLine="true"
android:text="@string/name"/>
在第一个示例中,文本似乎是黑色背景的白色,而在第二个示例中,文本是白色背景,没有 tex 。我的猜测是文本在那里,但它是白色的,所以它是不可见的。尝试将 TextView
颜色更改为黑色,或您想要的任何颜色,看看是否有所不同。尝试将以下内容添加到您的 TextView
布局中:android:textColor="@color/black"
另外我修复了这个错误!只需将 android:background="@android:color/transparent"
添加到列表项布局中的 TextView
和 CheckedTextView
元素。