【问题标题】:How to Control Programmatically Generated TextViews如何控制以编程方式生成的 TextView
【发布时间】:2017-02-14 03:14:51
【问题描述】:

如果有人可以为我提供解决方案,我感谢您的帮助。我有两个问题:

1- 我有一个按钮,每次单击它都会生成 Params 和 TextView。我将变量设置为 textview "textnew" 和 param "lptxt"。但是,我只能控制最后生成的文本视图、字体、字体大小、删除..等。有没有设置自动 id 的方法,我可以用其他方法调用它?我尝试了 isSelected、isTouched、hasFocus 等,但没有任何效果。

2- 如何将我的 TextView 设置回设置边框后的状态?假设我已经为 10dp 半径和红色的 TextView 设置了边框。但是当触摸 TextView 时,边框会更改为 drawable/corners 中所述的 1dp 半径。

谢谢

这是我的代码

RelativeLayout rel0 = (RelativeLayout) findViewById(R.id.rel0);

点击:

textnew = new TextView(MainActivity.this);
    lptxt = new RelativeLayout.LayoutParams(
                                    RelativeLayout.LayoutParams.WRAP_CONTENT,
                                    RelativeLayout.LayoutParams.WRAP_CONTENT);
                            lptxt.addRule((RelativeLayout.CENTER_HORIZONTAL));
                            lptxt.addRule((RelativeLayout.CENTER_VERTICAL));
                            lptxt.addRule((RelativeLayout.CENTER_IN_PARENT));
                            textnew.setLayoutParams(lptxt);
                            rel0.addView(textnew);
                            rel0.bringChildToFront(textnew);
                            rel0.bringToFront();
                            textnew.setText(edittextdialog.getText().toString());

触摸屏:

case MotionEvent.ACTION_DOWN: {
                        textnew.setBackgroundResource(R.drawable.borders);
                        textnew.isSelected();

                        break;
                    }

顺便说一句,我正在开发 API 11

提前谢谢你,

【问题讨论】:

  • 文本视图是以编程方式创建的。意味着我希望按钮创建文本视图,但如果我设置 id,它将是一个。是的,我记得它,但它只会是一个。
  • 该解决方案适用于 API 17。我在 11.thanx 虽然
  • 不需要设置id,其他方法使用textnew即可。您可以将 TextView 对象放入 List
  • @tesla1984 我试过了。但我只能控制最后生成的文本视图。

标签: android textview generated programmatically


【解决方案1】:
  1. 在您的TextView 上使用setTag 并使用findViewWithTag 获得您需要的视图。

  2. ACTION_UP上重置一切

【讨论】:

    【解决方案2】:

    比如你生成5个TextView

    List<TextView> list = new ArrayList<TextView>();
    for(int i=0;i<5;i++){
         TextView textView = generateTextView();
         list.add(textView);
         rel0.addView(textView);
    }
    

    生成TextView的方法

    public TextView generateTextView(){
        TextView textnew = new TextView(MainActivity.this);
        ...
        return textnew;
    }
    

    然后你可以控制列表中的文本视图

    如果你使用相同的lptxt layoutparams,textview 正在使用 relativelayoutparams。 textviews将是相同的位置,你只能看到最后一个

    【讨论】:

    • 这是个好主意,但我不想使用列表,也不想限制 textviews 的用户。另外,我正在使用文本视图生成布局参数。因此,每个 textview 都有自己的 layoutparam。我可以看到并移动每一个,尽可能远。但我只能删除或字体最后一个。从我的编码中,我是否遗漏了什么?
    • @Badee 你能展示更多关于“删除或字体”的代码吗?
    • 删除我使用 rel0.removeView(textnew);
    • 对于字体我使用的是字体 tf = Typeface.createFromAsset(getAssets(), "aaa.ttf"); textnew.setTypeface(tf);
    • 你能在问题中显示完整的代码吗?你发布的代码没有问题
    【解决方案3】:

    我找到了解决此问题的方法:

    我在 ACTION_UP 上放大了一个视图,我可以在其中更改文本大小、颜色、字体,甚至删除它。更改直接发生在有问题的选定文本视图上。

    感谢大家的贡献。

    这是我的代码:

        case MotionEvent.ACTION_UP: {
    
        LayoutInflater lifirst = LayoutInflater.from(MainActivity.this);
        View lifirstpv = lifirst.inflate(R.layout.infirst, null);
        final TextView editfirst = TextView)lifirstpv.findViewById(R.id.editfirst);
        final TextView deletefirst = (TextView)lifirstpv.findViewById(R.id.deletefirst);
    
        pop = new PopupWindow(
    lifirstpv,RelativeLayout.LayoutParams.WRAP_CONTENT,
    RelativeLayout.LayoutParams.WRAP_CONTENT);
    
        pop.setOutsideTouchable(true); pop.setTouchable(true);
        deletefirst.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
        rel0.removeView(teext);
        pop.dismiss();
        return true;
                       }
              });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-02
      • 2013-02-07
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      • 2011-04-27
      • 1970-01-01
      相关资源
      最近更新 更多