我是Android的新手所以请原谅我的无知〜我有几个问题我无法找到答案。
我创建了一个名为ImageTapView
的新视图。我们的想法是,当您点按视图时,会出现信息叠加层。这是班级(现在只是准系统):
package com.mysite;
public class ImageTapView extends View {
public ImageTapView(Context context, AttributeSet attrs){
super(context, attrs);
init(context);
}
private void init(Context context){
}
public void onClick(){
}
}
到目前为止,我已经
了创建自定义类文件
创建一个名为image_tap_view.xml
的布局xml文件(我想我可能在这里错了)
我的 res / values / attrs.xml
declare-stylable
醇>
我很困惑。现在我的ListAdapter
我在ImageView
返回getView()
。所以我现在要返回ImageTapView
,而是将ImageView
传递给我的ImageTapView
。所以我的问题是:如何将此ImageView
传递给ImageTapView
?
其次,我对布局文件感到很困惑。现在我的image_tap_view.xml
我有这个:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<com.mysite.ImageTapView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#333333"
custom:labelPosition="left"
custom:showText="true"
/>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Custom view Test"
/>
</RelativeLayout>
</LinearLayout>
但是在我的自定义视图布局xml中拥有自己的自定义视图似乎是错误的。不会导致无限循环吗?所以我的问题是:我在哪里以及如何为新ImageTapView
指定布局?
提前致谢!
答案 0 :(得分:1)
从我发布的内容中我可以看到,你的ImageTapView需要是一个子类(扩展)View。然后在返回getView的类中,您可以返回ImageTapView,因为它在技术上仍然是View。
现在请看:http://developer.android.com/training/custom-views/index.html
在image_tap_view.xml
而不是com.mysite.ImageTapView
中,您应该像以前一样使用ImageView
。在ImageTapView
类中,当您需要此ImageView
组件时,只需创建一个并从xml中解析它。
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#333333"
custom:labelPosition="left"
custom:showText="true"
/>
public class ImageTapView extends View {
public ImageTapView(Context context, AttributeSet attrs){
super(context, attrs);
init(context);
}
private void init(Context context){
ImageView iv = (ImageView)findViewById(//retrieve id set in xml);
}
public void onClick(){
}
}
答案 1 :(得分:1)
在xml内部只保留ImageView
并在自定义视图的内部init函数中膨胀此xml并将其返回。
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#333333"
/>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Custom view Test"
/>
</RelativeLayout>
</LinearLayout>
自定义视图:
public class ImageTapView extends LinearLayout{
public ImageTapView(Context context, AttributeSet attrs){
super(context, attrs);
init(context);
}
public ImageTapView(Context context){
super(context);
init(context);
}
private void init(Context context){
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.your_xml, this, true);
}
public void onClick(){
}
}
getView:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageTapView view = (ImageTapView ) convertView;
if (view == null)
view = new ImageTapView (getContext());
return view;
}