如何在TextView上激活文本选框?

时间:2015-08-03 23:39:56

标签: android performance android-layout android-fragments remoteview

我想在RemoteView中使用带有选框效果的TextView

我有这个布局XML描述我的RemoteView(R.layout.notification_loading_small)的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="match_parent"
              android:layout_height="64dip"
              android:background="@color/primary_background_inverted">

    <ProgressBar android:indeterminate="true"
                 android:layout_width="64dip"
                 android:layout_height="64dip"
                 android:id="@+id/marker_progress" style="?android:attr/progressBarStyle"
                 android:layout_gravity="center_vertical|center_horizontal"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="0.5"
        android:orientation="vertical"
        android:padding="@dimen/padding_small"
        android:gravity="center_vertical">

        <TextView
            android:id="@+id/notification_small_textview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:textColor="@color/primary_textcolor_inverted"
            android:textSize="@dimen/text_size_large"
            android:text="@string/loading"/>

        <TextView
            android:id="@+id/notification_small_textview2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:textColor="@color/secondary_textcolor_inverted"
            android:textSize="@dimen/text_size_small"
            android:text="@string/loading_advice"/>
    </LinearLayout>

</LinearLayout>

我的Java中的方法是这样的:

public void createTestNotification() {
        mSmallLoadingNotificationView = new RemoteViews(getPackageName(), R.layout.notification_loading_small);

        NotificationCompat.Builder builder = new NotificationCompat.Builder(
                PlayerService.this)
                .setSmallIcon(R.drawable.ic_notification).setContentTitle(APP_NAME)
                .setOngoing(true).setPriority(NotificationCompat.PRIORITY_MAX)
                .setContent(mSmallLoadingNotificationView);

        mNotification = builder.build();

        startForeground(PLAYERSERVICE_NOTIFICATION_ID, mNotification);
}

我想将 id / notification_small_textview2 中的文字水平选取,但到目前为止似乎是一项不可能完成的任务......

根据互联网我需要添加 android:ellipsize =“marquee” android:marqueeRepeatLimit =“marquee_forever” android:lines =“1我的TextView中的“ android:singleLine =”true“。我们似乎还需要从Java中的TextView调用 setSelected(true)方法。但是我找不到用这种方法做到这一点的方法......我错过了什么?

我应该如何修改我的Java代码以使字幕工作?

2 个答案:

答案 0 :(得分:3)

我认为只有当文本显示长度大于TextView的宽度时,选框方式才有效,并且由于您将其设置为match_parent,因此需要是一个很长的文本。

此外,您需要设置可聚焦属性。 我尝试了以下内容:

<TextView
    android:text="Some string here that is wider than your screen"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
    android:focusable="true"
    android:focusableInTouchMode="true"/>

如果你的字符串不够长,首先要想到的是左右TextView动画。或者可能实现使用偏移量绘制文本的自定义TextView

答案 1 :(得分:0)

我不确定您可以对通知做什么,但如果问题与TextView有关,您可以使用WebView代替一些HTML。

https://stackoverflow.com/a/17007724/3545278