帮助使用Compound View和onLayout以及onMeasure(Horizo​​ntalScrollView)

时间:2011-05-12 09:40:01

标签: android android-layout

我想创建自己的复合视图。此视图将扩展LinearLayout,并在其中包含Horizo​​ntalScrollView。这个Horizo​​ntalScrollView将保存一个包含多个TextView的父LinearLayout。

我想要实现的就像字母水平索引。通过上述方法,它可以正常工作。但这还不够。

现在字母A不能位于滚动的中心,因为它是第一个字母,并且您不能向左滚动更多。我想要实现的是用户可以向左滚动,直到第一个字母(A)位于中心的位置。滚动到右边和最后一个字母(Z)时,它的工作方式相同。

我对如何做到这一点非常困惑。我知道我可以在滚动中将填充设置为内部LinearLayout,但我必须等到我知道滚动的宽度(它的大小是动态的,FILL_PARENT)。我可以在onLayout方法中获取此大小,调用getMeasuredWidth。然后我可以使用所需的值更新内部LinearLayout填充,但它看起来像我更改填充,而innerLayout的宽度不会改变。

我还尝试在A之前和之后添加2个间隔符(只是视图),但范例是相同的。当我知道卷轴的宽度时,我需要改变它的大小。

请帮忙! :d

如果需要,我可以发布一些代码。

用图片编辑: enter image description here

所以我希望能够向左滚动更多,直到字母A位于中间。

帮助!感谢。

1 个答案:

答案 0 :(得分:1)

这是我为测试所做的。一些屏幕截图hereherehere

我认为它与你想要完成的事情非常吻合。

活动的一些代码 AlphabetActivity.java

package com.ocus.androidtests.activity;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Gallery;

import com.ocus.androidtests.R;

public class AlphabetActivity extends Activity {

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.alphabet);

        final Gallery gallery = (Gallery) findViewById(R.id.gallery);
        final String[] strings = new String[] {
                "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };

        gallery.setAdapter(new ArrayAdapter<String>(this,
                R.layout.alphabet_item, strings));
    }
}

布局代码 alphabet.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Gallery
        android:id="@+id/gallery"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:spacing="20sp" android:unselectedAlpha="1"/>
</LinearLayout>

适配器视图的代码(布局) alphabet_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textStyle="bold"
    android:textSize="30sp" />