【问题标题】:How to selected or highlight TextView programmatically in Android?如何在 Android 中以编程方式选择或突出显示 TextView?
【发布时间】:2017-01-20 09:38:03
【问题描述】:

目前,我正在创建一个用于阅读的小应用程序。有一个文本视图来显示文本。我们可以为文本添加书签并存储在列表视图中。我想从列表视图中单击它并突出显示或选择文本视图中的书签索引。我可以得到bookmark_index。有没有像textview.setSelect(Start,Length) 这样的方法?或者任何图书馆都可以做到?谢谢

请查看图片以了解我的想法。

【问题讨论】:

    标签: android textview highlight


    【解决方案1】:

    使用 Spannable

    Spannable WordtoSpan = new SpannableString("partial colored text");        
    WordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), startIndex, stopIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(WordtoSpan);
    

    【讨论】:

    【解决方案2】:

    上述所有解决方案都不适合我。 然后我在 XML 中添加了android:textIsSelectable="true",但它不起作用。

    它起作用的原因是添加textView.setTextIsSelectable(true) 在您的活动、片段或适配器中。

    【讨论】:

      【解决方案3】:

      这取决于您希望支持的最低 Android 版本。

      在 3.0+(API 级别 11 及更高版本)上,您在 TextView 上具有 textIsSelectable 属性,它启用了此行为。例如:

      <TextView
          android:id="@+id/deviceIdTV"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:textIsSelectable="true"
          android:text="" />
      

      或者您可以使用下面的 span 自己实现此功能。

      TextView myTV = (TextView)findViewById(R.id.textView1);
      String  textString = "StackOverFlow Rocks!!!"; 
      Spannable spanText = Spannable.Factory.getInstance().newSpannable(textString);
      spanText.setSpan(new BackgroundColorSpan(0xFFFFFF00), 14, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
      myTV.setText(spanText);
      

      【讨论】:

      • 谢谢,我试试看。
      【解决方案4】:

      也许此解决方案将帮助您配置菜单或文本选择。

      我希望文本是可选择的(用于复制和粘贴)或希望其他手势起作用。

      • 在布局文件中或以编程方式将 textIsSelectable 设置为 false。
      • 使用手势在文本视图上设置 onTouchListener。
      • 允许其中一种手势切换到 textSelection 模式。见下文。

      如何以编程方式设置 textSelection?

      • 将 textIsSelectable、focusable、longPressable 设置为 true
      • 将 onTouchListener 设置为 null。
      • 安装点击监听器以切换回正常手势/菜单。

      1) 安装您的 GestureHandler:

      // Create your Touch Listener  
      onTouchListener = new OnSwipeTouchListener(mCtx, this);
      view.setOnTouchListener( onTouchListener);
      

      2) 切换到文本选择方式:

      // Create your popup with an menu option to switch to textselection modus:
      PopupMenu popup = new PopupMenu(mCtx, view);
      popup.inflate(R.menu.text_options_menu);
      popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
          @Override
          public boolean onMenuItemClick(MenuItem item) {
              switch (item.getItemId()) {
                  case ...
                  case R.id.text_textisselectable:
                      view.setOnTouchListener(null);
                      ((TextView)view).setTextIsSelectable( true);
                      ((TextView)view).setFocusable( true);
                      ((TextView)view).setLongClickable( true);
                      // Install a click listener to switch back to the previous Touch Listener
                      ((TextView)view).setOnClickListener(new View.OnClickListener() {
                          @Override
                          public void onClick(View v) {
                              PopupMenu popupx = new PopupMenu(mCtx, view);
                              popupx.inflate(R.menu.selecttext_back_menu);
                              popupx.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                                  @Override
                                  public boolean onMenuItemClick(MenuItem item) {
                                      ((TextView)view).setTextIsSelectable( false);
                                      ((TextView)view).setFocusable( false);
                                      ((TextView)view).setLongClickable( false);
                                      view.setOnTouchListener(onTouchListener);
                                      return true;
                                  }});
                                  popupx.show();
                              }
                          });
                      break;
      

      【讨论】:

        猜你喜欢
        • 2018-07-31
        • 2014-12-11
        • 2014-06-15
        • 1970-01-01
        • 1970-01-01
        • 2018-02-14
        • 1970-01-01
        • 1970-01-01
        • 2015-04-05
        相关资源
        最近更新 更多