Помощь с Compund View и onLayout и onMeasure (HorizontalScrollView) - PullRequest
0 голосов
/ 12 мая 2011

Я хочу создать свой собственный составной вид.Это представление расширит LinearLayout, и в нем будет есть HorizontalScrollView.Этот HorizontalScrollView будет содержать родительский LinearLayout, который будет содержать несколько TextView.

То, что я хочу достичь, похоже на горизонтальный индекс по алфавиту.С вышеупомянутым подходом это работает просто отлично.Но этого недостаточно.

Прямо сейчас буква А не может находиться в центре прокрутки, так как это первая буква, и вы не можете прокрутить больше влево.Я хочу добиться того, чтобы пользователь мог прокручивать влево до точки, где первая буква (A) находится в центре.И что он работает так же, когда прокручиваешь вправо и последнюю букву (Z).

Я очень смущен тем, как это сделать.Я знаю, что я могу установить отступ для внутреннего LinearLayout в scroll, но мне нужно подождать, пока я не узнаю, насколько широка прокрутка (ее размер является динамическим, FILL_PARENT).Я могу получить этот размер в методе onLayout, вызывая getMeasuredWidth.Затем я могу обновить внутреннее заполнение LinearLayout требуемыми значениями, но это выглядит как событие, хотя я изменяю заполнение, ширина innerLayout не меняется.

Я также пытался добавить 2 проставки (только просмотры), прежде чемА и после Z, но парадигма та же.Мне нужно изменить его размер, когда я узнаю о ширине свитка.

Пожалуйста, помогите!: D

При необходимости я могу опубликовать некоторый код.

РЕДАКТИРОВАТЬ с изображением: enter image description here

Так что я хочу иметь возможность прокручивать больше влево, только допосередине буква А.

Помогите!Благодаря.

1 Ответ

1 голос
/ 12 мая 2011

Вот что я сделал для теста.Некоторые скриншоты здесь , здесь и здесь .

Я думаю, это вполне соответствует тому, что вы пытаетесь достичь.

И некоторый код для действия 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" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...