指定宽度时水平ScrollView不滚动

时间:2014-05-13 14:41:47

标签: android android-layout

我尝试使用带有8个按钮的Horizo​​ntalScrollView,我可以编码。但是我希望布局的宽度是屏幕宽度的两倍,因此屏幕上有4个按钮,用户必须滚动才能看到更多(我不想要"快照&#34 ;滚动)。

为此,我手动将Horizo​​ntalScrollView的宽度改为" 770dp"但每当我指定宽度时它看起来是正确的但不会滚动。将宽度更改回" wrap_content"它工作正常,但看起来不正确(屏幕上有5或6个按钮)。

我的xml代码如下。这只是一个摘录 - 屏幕上还有更多的布局/视图。

我希望以编程方式指定宽度,以后手机的屏幕尺寸不会再移动到那个,直到我弄清楚上面的原因是什么不起作用。 如果有人想伸出手,我已经包含了该代码,但它与上述非滚动问题无关。

提前感谢您提供的任何帮助。非常感谢。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:orientation="vertical"
tools:context="com.example.testScroll.MainActivity"
tools:ignore="MergeRootFrame" >

<HorizontalScrollView 
android:id="@+id/topline_Buttons"
android:layout_width="770dp"
android:layout_height="wrap_content"
android:fillViewport="true"
android:scrollbars="none">

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="0dp"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/button_1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:padding="0dp"
        android:layout_weight="1"
        android:text="@string/button_1" />

    <Button
        android:id="@+id/button_2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:padding="0dp"
        android:layout_weight="1"
        android:text="@string/button_2" />

    <Button
        android:id="@+id/button_3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:padding="0dp"
        android:layout_weight="1"
        android:text="@string/button_3" />

    <Button
        android:id="@+id/button_4"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:padding="0dp"
        android:layout_weight="1"
        android:text="@string/button_4" />

    <Button
        android:id="@+id/button_5"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:padding="0dp"
        android:layout_weight="1"
        android:text="@string/button_5" />

    <Button
        android:id="@+id/button_6"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:padding="0dp"
        android:layout_weight="1"
        android:text="@string/button_6" />

    <Button
        android:id="@+id/button_7"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:padding="0dp"
        android:layout_weight="1"
        android:text="@string/button_7" />

    <Button
        android:id="@+id/button_8"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:padding="0dp"
        android:layout_weight="1"
        android:text="@string/button_8" />


</LinearLayout>

</HorizontalScrollView>
</LinearLayout>

以下是我在SO HERE上找到的以编程方式设置宽度的内容。虽然我还没有开始工作

    //Set HorizontalScrollView double screen width
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(metrics.widthPixels*2, LayoutParams.MATCH_PARENT);
    LinearLayout topline_Buttons = (LinearLayout) findViewById(R.id.topline_Buttons);
    topline_Buttons.setLayoutParams(params);

3 个答案:

答案 0 :(得分:0)

我认为尝试增加滚动视图的大小是解决这个问题的错误方法。如果希望滚动视图包装的布局更大,则更改布局的高度。

请记住,按钮位于LinearLayout中,并且当前设置为包装内容,因此它只占用显示其子项(按钮)所需的空间。

试试这个(当然还有你的其余代码):

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


<LinearLayout
    android:id="@+id/topline_Buttons"
    android:layout_width="770dp"
    android:layout_height="wrap_content"
    android:layout_margin="0dp"
    android:orientation="horizontal" >

答案 1 :(得分:0)

// try this way,hope this will help you..

Note : if fix HorizontalScrollView layout_width then it's not Scrollable so you have gave layout_width "wrap_content"

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="true"
    android:orientation="vertical">

    <HorizontalScrollView
        android:id="@+id/topline_Buttons"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fillViewport="true"
        android:scrollbars="none">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <Button
                android:id="@+id/button_1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="button_1" />

            <Button
                android:id="@+id/button_2"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="button_2" />

            <Button
                android:id="@+id/button_3"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="button_3" />

            <Button
                android:id="@+id/button_4"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="button_4" />

            <Button
                android:id="@+id/button_5"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="button_5" />

            <Button
                android:id="@+id/button_6"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="button_6" />

            <Button
                android:id="@+id/button_7"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="button_7" />

            <Button
                android:id="@+id/button_8"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="button_8" />
        </LinearLayout>
    </HorizontalScrollView>
</LinearLayout>

**Also remove this peace of code from Activity**

DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(metrics.widthPixels*2, LinearLayout.LayoutParams.MATCH_PARENT);
        topline_Buttons.setLayoutParams(params);

答案 2 :(得分:0)

好的我已经解决了!或者至少有一种方法...... 如果有更好的方式让我知道。

而不是指定LinearLayout或Horizo​​ntalScrollView的宽度,而不是指定屏幕大小的1/4内的按钮宽度。 Horizo​​ntalScrollView应该填满整个页面,LinearLayout包装内容,因此按钮为自己留出足够的空间。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:orientation="vertical">


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

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="0dp"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/button_1"
            android:layout_width="92dp"  // Specify width here manually
            android:layout_height="wrap_content"
            android:text="1" />
... etc

虽然有效,但很明显看起来不适合许多屏幕尺寸,所以我以编程方式指定了它:

Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    int screenWidth = size.x / 4;

    button_1 = (Button)findViewById(R.id.button_1);

    button_1.setLayoutParams(new LinearLayout.LayoutParams(screenWidth, LayoutParams.WRAP_CONTENT));