Web*_*cer 5 layout android loader adapter spinner
我在布局上有一些微调器,并使用加载程序在后台从db加载数据。问题在于,空的微调框的高度较小,直到加载数据为止。所以布局跳了起来。
如何防止这种跳跃?
编辑(添加了微调器行布局)
微调器行:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/Text1"
style="@style/StyleSpinner"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)
微调框下拉行:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/style_spinner_row_padding" >
<TextView
android:id="@+id/Text1"
style="@style/StyleSpinnerDropDownRow1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" />
<TextView
android:id="@+id/Text2"
style="@style/StyleSpinnerDropDownRow2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/Text1" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
分配的样式:
<!-- // Spinner // -->
<style name="StyleSpinner" parent="AppTheme">
<item name="android:textStyle">bold</item>
<item name="android:gravity">start</item>
<item name="android:textSize">@dimen/default_text_size_normal</item>
<item name="android:padding">@dimen/style_spinner_row_padding</item>
</style>
<style name="StyleSpinnerDropDownRow1" parent="AppTheme">
<item name="android:textStyle">bold</item>
<item name="android:textSize">@dimen/default_text_size_normal</item>
</style>
<style name="StyleSpinnerDropDownRow2" parent="AppTheme">
<item name="android:textStyle">normal</item>
<item name="android:textSize">@dimen/default_text_size_small</item>
</style>
Run Code Online (Sandbox Code Playgroud)
屏幕截图:

我刚刚遇到了同样的问题并设法自己解决了它,所以这就是我所做的。
我在微调适配器中为每个项目布局充气android.R.layout.simple_spinner_dropdown_item 。当我查看这个布局时,我注意到它没有边距,只有一个来自android:attr/dropdownListPreferredItemHeight的设定高度。
所以我想我应该以编程方式获取此列表首选项目高度值并将其设置为我的旋转器最小高度。使用此 stackoverflow 问题的答案,我能够获得正确的值并将其设置为我的微调器。
android.util.TypedValue value = new android.util.TypedValue();
getActivity().getTheme().resolveAttribute(android.R.attr.listPreferredItemHeight, value, true);
android.util.DisplayMetrics metrics = new android.util.DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
float ret = value.getDimension(metrics);
mSpinner.setMinimumHeight((int) (ret - 1 * metrics.density));
Run Code Online (Sandbox Code Playgroud)
我删除了 1dip,因为返回的值似乎已四舍五入,这使其高了 1 像素。
现在我所有的旋转器都具有相同的高度,无论它们有物品还是空的。