当Horizo​​ntalScrollView的中心元素不足以使其滚动时

Ala*_*air 14 layout android element center horizontalscrollview

我有一个布局,其中HorizontalScrollView包含一个LinearLayout菜单,其中的内容用数据库的内容充气.这样可以正常工作,但是当没有足够的元素来进行HSV滚动时,这不会填满理想应该居中的屏幕宽度.即目前:

| Element 1 Element 2                         | <- edge of screen
Run Code Online (Sandbox Code Playgroud)

代替:

|        Element 1            Element 2       | <- edge of screen
Run Code Online (Sandbox Code Playgroud)

同时仍然能够:

| Element 1 Element 2 Element 3 Element 4 Elem| <- edge of screen now scrolling
Run Code Online (Sandbox Code Playgroud)

布局XML是:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLinearLayout"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView 
         android:id="@+id/header"
         android:layout_width="fill_parent"
         android:layout_height="25dp" >
    </TextView>

    <ScrollView
         android:id="@+id/scroll1"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:layout_weight="1" >

        <LinearLayout
             android:id="@+id/contentLayout"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:orientation="vertical" >

        </LinearLayout>
    </ScrollView>

    <HorizontalScrollView
        android:id="@+id/horizontalScrollView1"
        android:layout_width="fill_parent"
        android:layout_height="30dp">

        <LinearLayout
            android:id="@+id/footerLayout"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="horizontal" >

        </LinearLayout>
   </HorizontalScrollView>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

以下XML在footerLayout中膨胀:

<?xml version="1.0" encoding="utf-8"?>

        <TextView
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/footer_content"
            android:textSize="18sp"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingLeft="5dp"
            android:paddingRight="5dp"
            android:text="FOOTER"
            android:singleLine="true" />
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

Sou*_*ous 28

我刚刚解决了这个问题.几个小时前我遇到了它.您需要将Horizo​​ntalScrollView置于其父级中心,并将其宽度/高度设置为wrap_content.放在HSV中的布局必须设置其宽度/高度以包装内容.这里的重要部分是不在此布局上设置任何gravity/layout_gravity,或者在给视图膨胀后可能会遇到(非常烦人)裁剪问题.以下示例包含在RelativeLayout中.

 <HorizontalScrollView  android:id="@+id/svExample"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_below="@id/rlExample">
    <LinearLayout
        android:id="@+id/llExample"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
    </LinearLayout>
</HorizontalScrollView >
Run Code Online (Sandbox Code Playgroud)


小智 7

以下是对我有用的最简单方法。

<HorizontalScrollView
    android:id="@+id/horizontalScrollView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:layout_gravity="center">

    <LinearLayout
        android:id="@+id/layout_others"
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</HorizontalScrollView>
Run Code Online (Sandbox Code Playgroud)


Ste*_*los 5

我遇到了同样的问题,终于让它起作用了。这是一个最小的示例:

使用Horizo​​ntalScrollView的主要活动布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fillViewport="true" >

        <LinearLayout
            android:id="@+id/container"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
        </LinearLayout>

    </HorizontalScrollView>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

将被放大并放入滚动视图内的元素的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:orientation="horizontal" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="your text" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

这是膨胀和添加元素的代码示例:

LinearLayout container = (LinearLayout) findViewById(R.id.container);
LayoutParams elementLayoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1f);
int elementCount = 3; // ...or however many you like
for (int i = 0; i < elementCount; i++) {
    LinearLayout element = (LinearLayout) getLayoutInflater().inflate(R.layout.element, null);
    container.addView(element, elementLayoutParams);
}
Run Code Online (Sandbox Code Playgroud)

它主要基于Romain Guy本文中介绍的用于扩展ScrollViews内容的技术。

但是,在这种情况下,当您动态添加内容时,另一个要点是在将元素添加到容器时使用LayoutParams设置权重的正值(在本示例中为1f)。如果您有一组静态元素,可以直接将其包含在容器中,而无需充气,则可以在XML布局中指定元素外部LinearLayout的权重,如下所示:

android:layout_weight="1"
Run Code Online (Sandbox Code Playgroud)

但是,如果您动态执行此操作将无法正常工作,因为权重将重置为0并且元素会折叠。因此,您需要通过LayoutParams进行设置。


Aas*_*gar 0

将 wieght 1 分配给膨胀视图中的 textview 并使宽度包裹内容