0

我正在尝试在其下方创建一个图标和简短描述。我创建了一个带有 ImageView 和 TextView 的自定义 View 类,并将它与我的 xml 文件集成,现在 imageView 和默认文本出现在屏幕上,我不知道如何更改 textview 的文本内容或图像视图的来源。

我的视图.java

package sda.jk;

public class MyView extends LinearLayout{

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
        LayoutInflater li=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v= li.inflate(R.layout.myview, this);
    }

}

我的视图.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/ic_launcher"
        />
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="my view"/>

</LinearLayout>

主要的.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res/sda.jk"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
<sda.jk.MyView
        android:id="@+id/myView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >


    </sda.jk.MyView>
</LinearLayout>
4

5 回答 5

1

您在 sda.jk.MyView 中编写一个函数来设置文本。要更改文本,只需使用字符串参数调用函数

 Class MyView extends LinearLayout
 {
     //...

     public void setUserText(String str)
     {
          textview.setText(str);
     }

     //...
 }
于 2012-04-09T12:42:36.597 回答
1

Step-1首先将id分配给myview中的image view和text view。xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageView 
        android:id="@+id/myImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/ic_launcher"
        />
    <TextView 
        android:id="@+id/myText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="my view"/>

</LinearLayout>

第 2 步 使用 oncreate 方法初始化您自己的视图

MyView mv = (MyView)findViewById(R.id.myView1);

step-3 使用自己视图的 findViewById 方法初始化图像视图和文本视图

TextView textView = (TextView) mv.findViewById(R.id.myText);
        ImageView imageView = (ImageView) mv.findViewById(R.id.myImage);

step-4 使用 setText 方法将文本设置为文本视图

textView.setText("Sunil Kumar Sahoo");

使用将背景图像设置为图像视图

imageView.setBackgroundResource(R.drawable.ic_launcher);

您的 oncreate 方法将如下所示(从第 2 步到第 4 步)

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
        MyView mv = (MyView)findViewById(R.id.myView1);
        TextView textView = (TextView) mv.findViewById(R.id.myText);
        textView.setText("Sunil Kumar Sahoo");
        ImageView imageView = (ImageView) mv.findViewById(R.id.myImage);
        imageView.setBackgroundResource(R.drawable.ic_launcher);
    }
于 2012-04-09T13:06:27.740 回答
0

TextView 中有一个有用的功能,称为 compund drawables,它允许您合并一个可在文本的上方、下方、左侧或右侧绘制的可绘制对象。像这样使用它:

<TextView
    android:id="@+id/txt"
    android:text="my compound drawable textview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:drawableTop="@drawable/xxxxx" />

您也可以使用 drawableBottom、drawableLeft 等。这样你就不需要实现你自己的类。

于 2012-04-09T12:41:27.940 回答
0

您可以通过编写自定义 attr.xml 并在自定义视图的构造函数中加载属性来添加自定义属性。有关完整示例,请查看此页面 http://javawiki.sowas.com/doku.php?id=android:custom-view-attributes

于 2012-04-09T12:45:07.003 回答
0

要从视图层次结构中访问单个元素,请使用该findViewById方法。参考http://developer.android.com/reference/android/view/View.html#findViewById%28int%29

您必须在 XML 中为视图元素提供标识符,因此:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imgView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/txtView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="my view" />

</LinearLayout>

并从您的自定义视图类中引用它们:

ImageView imageView = (ImageView)v.findViewById(R.id.imgView);
TextView textView = (TextView)v.findViewById(R.id.txtView);

通常,您希望将视图保留为实例变量(成员),以便您可以从其他方法更改它们。

于 2012-04-09T13:00:31.147 回答