我有一个数据输入类型活动,我使用线性布局来均匀地分隔textview和edittexts。然后我有一个滚动视图,它应该使用户可以在软键盘启动时滚动。
如果我使用android:fillViewport
线性布局正常工作并填充屏幕并均匀地展开每个项目,然后当键盘出现时停止每个项目均匀展开。如果我使用android:windowSoftInputMode="stateVisible|adjustPan"
,那么线性布局仍然分散,但滚动视图不再起作用(来自所有未解决的帖子,我认为你不能使用adjustPan工作滚动视图)
有没有办法在滚动视图中设置一个linearlayout,项目均匀展开并且在软键盘启动时仍可正常工作而不更改线性布局?
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport
>
<LinearLayout
android:gravity="left"
android:orientation="vertical"
android:id="@id/tab2"
android:paddingLeft="40.0dip"
android:paddingTop="0.0dip"
android:paddingRight="40.0dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1.0">
<TextView
android:id="@id/textViewBrand"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/brand" />
<AutoCompleteTextView
android:id="@id/editTextBrand"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
</AutoCompleteTextView>
</LinearLayout>
...more linearlayouts with textview and edittext to be spaced out evenly
答案 0 :(得分:1)
在你的scrollview中设置属性android:fillViewport =“true”它将起作用
答案 1 :(得分:0)
可能因为您的
而ScrollView无法正常工作android:layout_height属性
定义为match_parent。你必须把
WRAP_CONTENT
答案 2 :(得分:0)
Follow This Code, I hope it resolves your Problem
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
//Your Main Layout
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:weightSum="100">
// First Sub Layout Under Main Layout
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:layout_weight="10"
android:weightSum="100" >
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="TextView"
android:layout_weight="70" />
<EditText
android:id="@+id/editText1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="30" />
</LinearLayout>// Finishing First Sub layout
// Second Sub Layout Under Main Layout
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:layout_weight="10"
android:weightSum="100" >
<TextView
android:id="@+id/textView2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="TextView"
android:layout_weight="70" />
<EditText
android:id="@+id/editText2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="30" />
</LinearLayout>// Finishing Second Sub layout
similarly for 3rd,4rth,5th sub layouts and so on........
</LinearLayout> // Finishing Main Layout
</ScrollView> // Finishing ScrollView
答案 3 :(得分:0)
您可以浏览LinearLayout的子视图,并使用ViewTreeObserver.OnGlobalLayoutListener
在代码中自行将其大小设置为固定大小。
以下代码将大小设置为不更改,因此您可以使用带有权重的android:fillViewport
选项,然后基本上删除权重,但保留计算的大小。
我使用了这些代码并进行了一些修改,以确保子视图在ScrollView内部的LinearLayout中均匀分布,其中LinearLayout对于android:fillViewport
选项而言太大,无法使权重实际工作。这是通过对孩子们进行2次迭代来完成的。首先获取最大视图的高度,然后将所有子视图设置为该最大高度。
private void distributeViewsEvenlyInLinearLayout() {
ViewTreeObserver observer = linearParentView.getViewTreeObserver();
final ViewTreeObserver.OnGlobalLayoutListener globalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@SuppressWarnings("deprecation")
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
linearParentView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
linearParentView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
for (int i = 0; i < linearParentView.getChildCount(); i++) {
View child = linearParentView.getChildAt(i);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, child.getHeight());
child.setLayoutParams(layoutParams);
}
}
};
observer.addOnGlobalLayoutListener(globalLayoutListener);
}