我想创建自己的复合视图。此视图将扩展LinearLayout,并在其中包含HorizontalScrollView。这个HorizontalScrollView将保存一个包含多个TextView的父LinearLayout。
我想要实现的就像字母水平索引。通过上述方法,它可以正常工作。但这还不够。
现在字母A不能位于滚动的中心,因为它是第一个字母,并且您不能向左滚动更多。我想要实现的是用户可以向左滚动,直到第一个字母(A)位于中心的位置。滚动到右边和最后一个字母(Z)时,它的工作方式相同。
我对如何做到这一点非常困惑。我知道我可以在滚动中将填充设置为内部LinearLayout,但我必须等到我知道滚动的宽度(它的大小是动态的,FILL_PARENT)。我可以在onLayout方法中获取此大小,调用getMeasuredWidth。然后我可以使用所需的值更新内部LinearLayout填充,但它看起来像我更改填充,而innerLayout的宽度不会改变。
我还尝试在A之前和之后添加2个间隔符(只是视图),但范例是相同的。当我知道卷轴的宽度时,我需要改变它的大小。
请帮忙! :d
如果需要,我可以发布一些代码。
用图片编辑:
所以我希望能够向左滚动更多,直到字母A位于中间。
帮助!感谢。
答案 0 :(得分:1)
这是我为测试所做的。一些屏幕截图here,here和here。
我认为它与你想要完成的事情非常吻合。
活动的一些代码 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" />