Android:在图像之上设置文本和多个图像无法正常工作。
Android : Setting text and multiple images on top of image not working properly.
我正在开发一个 Android 应用程序,其中我有一个以静态方式设置的部分图像。现在,为了尝试,我在框架布局中使用 GridView。但是当我这样做时,我无法正确看到字母表,因为我认为它们会离开视图屏幕并且该部分的文本不再可见。我不知道我做错了什么。任何帮助都会很好。
activity_group_section.xml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dip" >
<FrameLayout android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:weightSum="1">
<ImageView
android:id="@+id/sectionimage"
android:layout_width="386dp"
android:layout_height="200dp"
android:scaleType="fitXY"
android:padding="5dp"
android:src="@drawable/sectionbackground"
/>
<TextView
android:id="@+id/sectionname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/textView"
android:visibility="visible"
android:gravity="center"
android:layout_gravity="center_horizontal" />
<GridView
android:id="@+id/grid_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="3"/>
</FrameLayout>
</RelativeLayout>
SectionLazyAdapter.java :
public class SectionLazyAdapter extends BaseAdapter{
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
GridView gridView;
static final String[] numbers = new String[] {
"A", "B", "C", "D", "E",
"F", "G", "H", "I", "J",
"K", "L", "M", "N", "O",
"P", "Q", "R", "S", "T",
"U", "V", "W", "X", "Y", "Z"};
public SectionLazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
activity = a;
data=d;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.activity_group_section, null);
TextView sectionName = (TextView)vi.findViewById(R.id.sectionname); // title
GridView gridView = (GridView) vi.findViewById(R.id.grid_view);
HashMap<String, String> sectionList = new HashMap<String, String>();
sectionList = data.get(position);
sectionName.setText(sectionList.get(GroupSectionActivity.msectionname));
ArrayAdapter<String> adapter = new ArrayAdapter<String>(activity,
android.R.layout.simple_list_item_1, numbers);
gridView.setAdapter(adapter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
}
});
return vi;
}
}
这是它的外观截图,我想看到图像内的字母和图像下方的部分名称,但事实并非如此,图像也向外移动。
我推测这是 XML 文件配置错误的问题。任何帮助都会很好。
框架布局没用所以你应该去掉它。
将此行添加到部分名称文本视图中:
android:layout_below="@id/sectionimage"
PS: 不推荐将一个可滚动视图放在另一个可滚动视图中,因为滚动会遇到问题。
发生这种情况的原因是您试图将 GridView 放入 ListView 中。
正如我所看到的那样,您这样做是因为您想要一个分段的 GridView,我建议只使用一个可以做到这一点的库,比如 this one。 Google "gridview with sections" 如果你对它不满意,你会发现很多其他库和 SO 问题(我在 link 中使用了那个,并且很满意)。
现在谈谈为什么你的方法不起作用。有很多原因会导致您难以采用这种方法。
- ListView 不能很好地处理其他可滚动组件(如 parent 或 child)。
- ListViews 为 children 提供了他们想要的所有高度,就像 ScrollView 对 child 所做的一样。 GridView 还没有为此做好准备,您需要为其强制设置一定的高度。
- 在 infinite 视图中使用 AdapterView 会使视图呈现 all children。这使得回收视图的整个意义变得毫无意义
你可以尝试继续这条路,但我担心 Android 会对你不利。
我正在开发一个 Android 应用程序,其中我有一个以静态方式设置的部分图像。现在,为了尝试,我在框架布局中使用 GridView。但是当我这样做时,我无法正确看到字母表,因为我认为它们会离开视图屏幕并且该部分的文本不再可见。我不知道我做错了什么。任何帮助都会很好。
activity_group_section.xml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dip" >
<FrameLayout android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:weightSum="1">
<ImageView
android:id="@+id/sectionimage"
android:layout_width="386dp"
android:layout_height="200dp"
android:scaleType="fitXY"
android:padding="5dp"
android:src="@drawable/sectionbackground"
/>
<TextView
android:id="@+id/sectionname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/textView"
android:visibility="visible"
android:gravity="center"
android:layout_gravity="center_horizontal" />
<GridView
android:id="@+id/grid_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="3"/>
</FrameLayout>
</RelativeLayout>
SectionLazyAdapter.java :
public class SectionLazyAdapter extends BaseAdapter{
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
GridView gridView;
static final String[] numbers = new String[] {
"A", "B", "C", "D", "E",
"F", "G", "H", "I", "J",
"K", "L", "M", "N", "O",
"P", "Q", "R", "S", "T",
"U", "V", "W", "X", "Y", "Z"};
public SectionLazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
activity = a;
data=d;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.activity_group_section, null);
TextView sectionName = (TextView)vi.findViewById(R.id.sectionname); // title
GridView gridView = (GridView) vi.findViewById(R.id.grid_view);
HashMap<String, String> sectionList = new HashMap<String, String>();
sectionList = data.get(position);
sectionName.setText(sectionList.get(GroupSectionActivity.msectionname));
ArrayAdapter<String> adapter = new ArrayAdapter<String>(activity,
android.R.layout.simple_list_item_1, numbers);
gridView.setAdapter(adapter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
}
});
return vi;
}
}
这是它的外观截图,我想看到图像内的字母和图像下方的部分名称,但事实并非如此,图像也向外移动。
我推测这是 XML 文件配置错误的问题。任何帮助都会很好。
框架布局没用所以你应该去掉它。
将此行添加到部分名称文本视图中:
android:layout_below="@id/sectionimage"
PS: 不推荐将一个可滚动视图放在另一个可滚动视图中,因为滚动会遇到问题。
发生这种情况的原因是您试图将 GridView 放入 ListView 中。
正如我所看到的那样,您这样做是因为您想要一个分段的 GridView,我建议只使用一个可以做到这一点的库,比如 this one。 Google "gridview with sections" 如果你对它不满意,你会发现很多其他库和 SO 问题(我在 link 中使用了那个,并且很满意)。
现在谈谈为什么你的方法不起作用。有很多原因会导致您难以采用这种方法。
- ListView 不能很好地处理其他可滚动组件(如 parent 或 child)。
- ListViews 为 children 提供了他们想要的所有高度,就像 ScrollView 对 child 所做的一样。 GridView 还没有为此做好准备,您需要为其强制设置一定的高度。
- 在 infinite 视图中使用 AdapterView 会使视图呈现 all children。这使得回收视图的整个意义变得毫无意义
你可以尝试继续这条路,但我担心 Android 会对你不利。