gpt4 book ai didi

当前选定列表项的 Android Ellipsize 选框问题

转载 作者:太空狗 更新时间:2023-10-29 15:24:11 25 4
gpt4 key购买 nike

我的问题 - 我希望自定义 ListView 中的 TextView 的文本仅在 ListView 中选择项目时才滚动滚动条。当列表项失去焦点时,我希望选取框停止滚动。我知道我需要将 TextView 设置为启用 (setEnabled(true)) 才能滚动工作,但是当我在添加项目时执行此操作时,它们都会滚动,这不是我想要的行为(但为什么会发生这种情况确实有道理)。我尝试使用 ListView 的点击处理程序以编程方式设置它们以将 TextView 设置为启用 (setEnabled(true)),在私有(private)变量中跟踪当前选定的项目,然后相反地设置以前的 View 单击新项目等时,TextView 启用状态为 false。我希望这是有道理的。下面是一些可能更好地说明它的 Java 代码:

    private View tempListItemView = null;

if (this.tempListItemView != null) {
TextView tempTxtView = (TextView) tempListItemView.findViewById(R.id.txtArticleTitle);
tempTxtView.setSelected(false);
tempTxtView.setEllipsize(TruncateAt.END);
}
// Set marquee of currently selected list item
TextView tt = (TextView) v.findViewById(R.id.txtArticleTitle);
tt.setEllipsize(TruncateAt.MARQUEE);
tt.setSelected(true);
tempListItemView = v;

这确实有效。但是,它有点笨拙。例如,如果前一个项目离开显示,它永远不会被关闭,当我选择列表项目时,我会丢失我设置的所有自定义 listSelector 属性(见下文)。此外,我还有一些其他奇怪的行为,滚动 TextView 的背景项变为黑色(甚至整个 ListView listSelector 完全消失。当我在我的 Droid 上使用键盘时,这些都没有发生。它可以正常工作,然而,我只是想在按下列表项时模拟此功能。我在网上找不到太多关于如何实现此功能的信息。以下是代码 fragment 和屏幕截图。

我有一个 ListActivity,我已将其绑定(bind)到具有自定义 ListView 的 ArrayAdapter。此 Activity 绑定(bind)到的内容 View 如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView
android:id="@+id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:listSelector="@drawable/list_selector"
/>
</LinearLayout>

list_selector 可绘制对象如下所示:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:drawable ="@drawable/maroon_list_select_bg" />
<item android:drawable="@drawable/maroon_list_select_bg" />
</selector>

它的 Drawable 只是一个 1x1 栗色像素,用于绘制列表项选择的栗色背景色。为了节省空间,我附上了自定义 View 的屏幕截图:(我的第一篇文章所以我不能:(

这里是定义每个列表项的自定义布局的简短 fragment (带有选取框 TextView)...

            <TextView
android:id="@+id/txtArticleTitle"
android:textSize="16sp"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/list_item"
android:singleLine="true"
android:ellipsize="end">
</TextView>
<TextView
android:id="@+id/txtArticleSnippet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/list_desc_copy"
>
</TextView>
<TextView
android:id="@+id/txtArticleVotes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Votes: 1576"
android:textColor="@color/list_small_copy"
>
</TextView>

请记住,我知道我需要将 android:ellipsize 设置为“marquee”才能滚动,但正如上面所解释的,我是以编程方式对当前选定的列表项执行此操作。

有人有解决办法吗?提前致谢,对于这篇冗长的帖子,我深表歉意……只是想做到彻底。再次感谢!

最佳答案

您是否尝试过使用自定义 TextView::New 类并扩展 TextView::?然后覆盖 onTouchEvent(MotionEvent event) 你是说它在你的机器人上的键盘上工作得很好。所以可能不是调用

super.onTouchEvent(MotionEvent 事件);

用正确的键调用

onKeyDown(int keyCode, KeyEvent 事件)

或者这就够了

onTrackballEvent(MotionEvent event)

不要忘记更改 XML

关于当前选定列表项的 Android Ellipsize 选框问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3638728/

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