- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
好的,我遇到了 listView 的属性 layout_width 的问题。
在我的项目中,我的 ListView 有一个不适合屏幕宽度的背景图像。因此,我将 layout_width 设置为 wrap_content,并将 listView 水平居中。
这似乎是个坏主意,因为在适配器中,调用 GetView 方法的次数超过显示单元格数的 3 倍。如果我在 fill_parent 上设置 layout_width,问题就解决了。我创建了一个显示问题的简单项目。
这是 Activity 的 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="fill_parent"
>
<ListView
android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
/>
</RelativeLayout>
item_list xml:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="16sp" >
</TextView>
最后是 Activity :
package fr.example.android.listviewbug;
import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
public class ExampleListViewBugActivity extends ListActivity{
public static int cpt;
public static final String[] COUNTRIES = new String[] {
"Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
"Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
"Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
"Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium",
"Belize", "Benin", "Bermuda", "Bhutan", "Bolivia",
"Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil", "British Indian Ocean Territory",
"British Virgin Islands", "Brunei", "Bulgaria", "Burkina Faso", "Burundi",
"Cote d'Ivoire", "Cambodia", "Cameroon", "Canada", "Cape Verde",
"Cayman Islands", "Central African Republic", "Chad", "Chile"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
cpt = 0;
setListAdapter(new CustomArrayAdapter(this, R.layout.list_item, COUNTRIES));
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d("AdapterTest", "onDestroy()");
}
private class CustomArrayAdapter extends ArrayAdapter<String>{
public CustomArrayAdapter(Context context, int textViewResourceId, String[] countries) {
super(context, textViewResourceId, countries);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d("AdapterTest", " cpt:"+ ++cpt);
return super.getView(position, convertView, parent);
}
}
}
所以我的解决方案是简单地在 fill_parent 上设置 layout_width,并修改 listview 背景的图像以添加一些透明边框以适合屏幕尺寸。
但我想知道为什么这个问题会出现在 ListView 上的 wrap_content 中,如果它是一个已知问题,为什么它不在文档中......
最佳答案
通过将宽度设置为“wrap_content”,您是在告诉 ListView 与其最宽的子项一样宽。因此,ListView 必须测量其项目并获取它必须调用 Adapter 上的 getView() 的项目。这可能会发生多次,具体取决于布局遍数、父布局的行为等。
请记住,无法保证在适配器上调用 getView() 的次数,也无法保证调用发生的顺序。因此,您必须尽可能高效地实现 getView()。底线是,这不是问题,这是这种情况下的预期行为。
关于android - ListView 的 Layout_width,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4270278/
我正在尝试绑定(bind) View 的宽度和高度,但我看不出问题出在哪里。 我在this google issue上找到了这个 To implement these for your applica
我正在开发 android 项目,一切正常,直到我突然打开 Android Studio 并发现所有布局文件都出现警告。例如,未知属性 android:layout_width、未知属性 androi
当我使用ndroid:layout_weight 属性时为什么要放置android:layout_width="0px"?例如下面是我的 main.xml 文件,我在其中使用了 android:lay
有一个 Activity 我想在手机中填满屏幕并为平板电脑弹出(对话框)。 我以为我做了一个这样的布局文件, 并将宽度的值外化为 在值/dimens.xml 中 match_parent 在值-xl
当我学习fragment on http://developer.android.com/reference/android/app/Fragment.html 我在layout-land/fragm
我有一个简单的布局。这是一个带有以下代码的按钮: 我在两台设备上运行它,一台比另一台小。我注意到按钮的大小没有变化。我虽然在使用 dip 时, View 的大小会根据屏幕大小而变化。我错了吗? 最佳
有什么方法可以解决必须将 layout_width 和 layout_height 参数添加到我的自定义 View 的问题?我知道有一些内置的 android View ,您不必为其提供这些属性。 最
当我使用 Android Studio 创建一个新的 Android 应用程序项目时,文件 activity_main.xml 包含以下内容。 为什么 TextView 的 layout_width
我在我的应用程序中遇到了这个问题,我似乎无法理解它是如何发生的。它只发生在 Samsung Galaxy Y 手机上,我在其他设备上试过这段代码,没问题。 java.lang.RuntimeExcep
我正在尝试创建一个界面,其中将向用户显示两个或多个按钮,如果单击一个按钮,则会向他显示一些布局。为此,我正在使用 SlidingDrawer。 嗯,我对 layout_width 和 layout_h
好的,我遇到了 listView 的属性 layout_width 的问题。 在我的项目中,我的 ListView 有一个不适合屏幕宽度的背景图像。因此,我将 layout_width 设置为 wra
我正在尝试支持库中的 PercentRelativeLayout 和 the docs只要求我指定一个 app:layout_widthPercent 属性。但是,当我这样做时,Android Stu
我使用样式文件为相同的布局设置了独特的样式, 风格: match_parent wrap_content horizontal @dimen/padd
这个 xml 有什么问题?这两个 TextView 似乎不占用相同的空间
这是我的观点,我希望将 layout_width 更改为“10dip”。我如何以编程方式执行此操作?请注意,这不是 LinearLayout,而是 View。 我知道 LayoutPar
我有一个布局,它在底部的前 2 个按钮上有标题,中间有一些 TextView 和编辑文本。我愿意将这些 EditText 和 Text View 放在 ScrollView 中,以便我可以滚动并且 E
我以编程方式添加 RadioButtons: RadioButton radioButton = (RadioButton) inflater.inflate(R.layout.radio_butto
上面的代码创建了一个错误的 View :当文本被(在代码中)替换为一个短的(1-3 位数字)数字时, View 宽度保持在大约 6 个字符 - 导致太多的填充。这个问题也发生在应用程序的其他一些地
我正在尝试在布局中制作一个带有硬编码宽度的搜索栏,但是,一旦搜索栏的硬编码宽度值超过某个值,搜索栏的宽度将不会反射(reflect)我设置的值。例如: 产生一个短的搜索栏,因为宽度决定
我有 View ,其中有 layout_width="wrap_content"。如果我在代码中使用 view.getWidth(),它返回 0。:-(如何将 View “wrap_content”的
我是一名优秀的程序员,十分优秀!