Скользящее меню Android для изменения содержимого на странице можно ли это сделать?

#android

#Android

Вопрос:

На главной странице вверху есть HorizontalScrollView и несколько текстовых полей TextView. Я хотел бы иметь возможность прокручивать и нажимать на любой текст TextView, и он изменяет RelativeLayout в соответствии с выбором, сделанным в HorizontalScrollView.

main.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<HorizontalScrollView android:id="@ id/horizontalScrollView1" android:layout_height="wrap_content" android:scrollbars="none" android:layout_width="wrap_content">
    <LinearLayout android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="match_parent" android:id="@ id/linearLayout1">
        <TextView android:layout_height="wrap_content" android:layout_weight="1" android:layout_width="70dp" android:id="@ id/EditTOne" android:text="tOne"></TextView>
        <TextView android:layout_height="wrap_content" android:layout_weight="1" android:layout_width="70dp" android:id="@ id/EditTTwo" android:text="tTwo"></TextView>
        <TextView android:layout_height="wrap_content" android:layout_weight="1" android:layout_width="70dp" android:id="@ id/EditTThree" android:text="tThree"></TextView>
        <TextView android:layout_height="wrap_content" android:layout_weight="1" android:layout_width="70dp" android:id="@ id/EditTFour" android:text="tFour"></TextView>
        <TextView android:layout_height="wrap_content" android:layout_weight="1" android:layout_width="70dp" android:id="@ id/EditTFive" android:text="tFive"></TextView>
        <TextView android:layout_height="wrap_content" android:layout_weight="1" android:layout_width="70dp" android:id="@ id/EditTSix" android:text="tSix"></TextView>
        <TextView android:layout_height="wrap_content" android:layout_weight="1" android:layout_width="70dp" android:id="@ id/EditTSeven" android:text="tSeven"></TextView>
    </LinearLayout>
</HorizontalScrollView>
<RelativeLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@ id/relativeLayout1"></RelativeLayout>
</LinearLayout>
 

У меня есть вторая страница макета с именем tone, которая будет связана с параметром меню tOne в HorizontalScrollView.

tone.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="match_parent"
 android:layout_height="match_parent">
 <TextView android:id="@ id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is tOne"></TextView>    
</LinearLayout>
 

Основное действие будет помечено, если выбран один из первых 4 вариантов путем записи в LogCat. Возможно ли отобразить tone.xml в relativelayout, если пользователь нажимает на опцию tOne в HorizontalScrollView? Затем, если пользователь выбирает tTwo display ttwo.xml в RelativeLayoutView и т.д.?

 import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class SlideMenu extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    TextView tOne, tTwo, tThree, tFour, tFive, tSix, tSeven, tEight, tNine, tTen;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        RelativeLayout vSpace = (RelativeLayout)findViewById(R.id.relativeLayout1);

        tOne = (TextView)findViewById(R.id.EditTOne);
        tTwo = (TextView)findViewById(R.id.EditTTwo);
        tThree = (TextView)findViewById(R.id.EditTThree);
        tFour = (TextView)findViewById(R.id.EditTFour);
        tFive = (TextView)findViewById(R.id.EditTFive);
        tSix = (TextView)findViewById(R.id.EditTSix);
        tSeven = (TextView)findViewById(R.id.EditTSeven);



        tOne.setOnClickListener(this);
        tTwo.setOnClickListener(this);
        tThree.setOnClickListener(this);
        tFour.setOnClickListener(this);
        tFive.setOnClickListener(this);
        tSix.setOnClickListener(this);
        tSeven.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch(v.getId()) {

        //--------------
        case R.id.EditTOne:
            System.out.println("Text One pressed");

        break;
        case R.id.EditTTwo:
            System.out.println("Text Two pressed");
        break;
        case R.id.EditTThree:
            System.out.println("Text Three pressed");
        break;
        case R.id.EditTFour:
            System.out.println("Text Four pressed");
        break;
        }
    }
}
 

Ответ №1:

Я считаю, что это довольно просто. Я добавил

         LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(R.layout.tone, vSpace);
 

после печати «Текст одним нажатием». Обязательно сначала создайте vSpace поле.

Чтобы сделать это со всеми из них, вызовите

 vSpace.removeAllViews()
 

прежде чем раздувать каждое представление.

Комментарии:

1. Спасибо Craigy, который работает хорошо. Смогу ли я анимировать переход от тона к tTwo. Например, сдвиньте один макет и вставьте следующий?

2. @John Пожалуйста, задайте это в новом вопросе.

3. Честно говоря, я мало что сделал с анимацией, но я попробовал пример отсюда с некоторым успехом. Я смог заставить его переключать представления между двумя из них, но логика становится сложнее с большим количеством просмотров, поскольку, похоже, доступны только методы showNext и showPrevious . Может быть, вы можете отслеживать, в каком представлении вы находитесь, а затем showNext повторно вызывать? Возможно, вам следует опубликовать новый вопрос.