【问题标题】:It is possible to set the text of a "TextView" from within a class 'extends View'可以在“扩展视图”类中设置“TextView”的文本
【发布时间】:2011-08-23 09:28:58
【问题描述】:

我在 Layout xml 中插入了一个名为“disegno”的自定义视图:

<?xml version="1.0" encoding="utf-8"?>
    <FrameLayout
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:background="?windowsBackground">
    <it.package.myapp.Disegno
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:id="@+id/finestraDisegno"
       android:isScrollContainer="true" />
    <FrameLayout
       android:layout_height="0dp"
       android:layout_width="0dp"
       ...
    <EditText
       ...
       android:id="@+id/et_MOD_x">
       </EditText>

然后我实现了扩展视图类来填充自定义布局:

package it.package.myapp;
import android.content.Context;
...
public class Disegno extends View {
    public Disegno(Context context) { 
            this(context, null, 0); }
    public Disegno(Context context, AttributeSet attrs) {
            this(context, attrs, 0);    
            setContentView(R.layout.main);  }
    public Disegno(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
            init(attrs);    }
    ...
    @Override
    protected void onDraw(Canvas canvas) {
            paint.setStyle(Paint.Style.FILL);
            paint.setAntiAlias(true);
            canvas.translate(mPosX, mPosY);
            canvas.scale(mScaleFactor, mScaleFactor);
            // chiamo routine assi cartesiani
            AssiCartesiani(canvas);
            // chiamo routine polilinea
            Polilinea(canvas); }
    ...

现在我想通过“findViewById(R.Id.et_MOD_x)”设置textView“et_MOD_x”的文本,改变代码如下:

@Override
protected void onDraw(Canvas canvas) {
            paint.setStyle(Paint.Style.FILL);
            paint.setAntiAlias(true);
            canvas.translate(mPosX, mPosY);
            canvas.scale(mScaleFactor, mScaleFactor);
            // chiamo routine assi cartesiani
            AssiCartesiani(canvas);
            // chiamo routine polilinea
            Polilinea(canvas);

            EditText et_MOD_x = (EditText) findViewById(R.Id.et_MOD_x)
            et_MOD_x.setText("abcd");

            }

但没有“setContentView(...)”是不可能的! 总结:我想从“扩展视图”类中设置“EditText”的文本。我要指向一个外部布局......嗯! 有什么办法吗?!

【问题讨论】:

    标签: android view extends ondraw settext


    【解决方案1】:

    在您的自定义视图中有参考

    public class Disegno extends View {
        private TextView textView;
    
        public void setTextView(TextView tv){
            textview = tv;
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            textview.setText("Your text here!") 
        }
    
    }
    

    在您的 Activity.onCreate() 中

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.my_layout);
    
        EditText et_MOD_x = (EditText) findViewById(R.Id.et_MOD_x);
        Disegno finestraDisegno = (Disegno)findViewById(R.Id.finestraDisegno);
        finestraDisegno.setTextView(et_MOD_x) ;
    
    
    }
    

    【讨论】:

      【解决方案2】:

      也许这不是正确的方法,但你可以:

      Get your editText in your activity and declare it as static.
      
      public static EditText et_MOD_x;
      et_MOD_x = (EditText) findViewById(R.Id.et_MOD_x)
      

      并在您的 View 类中设置文本:

      YourActivity.et_MOD_x.setText("abcd");
      

      希望对你有帮助..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-15
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 2017-09-02
        • 2017-11-23
        相关资源
        最近更新 更多