我需要使用哪个函数/布局来获取android中的以下视图

时间:2014-09-19 05:15:29

标签: android layout

我的任务如图所示 I want like this

水平滚动视图包含一组按钮,用于例如: - 11个按钮,当点击1时,它将包含需要从服务器端检索的数据,并且应该如下排列(即每个窗口只有四个圆圈)稍后我们需要滚动它们或滑动窗口以查看剩余的)。水平滚动视图是静态的,但它的下方是动态的,如何安排它们请给我建议。我试过线性布局,但它没有奏效。抱歉英语不好。因为我是android的新手,我无法做到。请帮助我。

1 个答案:

答案 0 :(得分:1)

在这里,这只是一个粗略的实现,您必须自己完善它,但这足以生成您想要的。我将分解它。

第1步:将此保存为drawable,在您的drawable文件夹名称中显示类似circle_bcg.xml的内容,这将为视图生成圆形背景

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >

    <gradient
        android:angle="360"
        android:endColor="#FFFF0000"
        android:startColor="#FFFF0000" />

</shape>

步骤2:由于您需要在水平滚动按钮列表下方显示四个图像,我们将创建一个不同的Cell布局,其中将按照您想要的方式排列四个图像,因为所有这些背景都将设置为我们上面的圆圈背景。在下面的单独布局中定义hcell_view.xml。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_margin="10dp"
        android:layout_weight=".5"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_margin="5dp"
            android:layout_weight=".5"
            android:background="@drawable/circle_bcg"
            android:src="@drawable/ic_launcher" />

        <ImageView
            android:id="@+id/imageView2"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_margin="5dp"
            android:layout_weight=".5"
            android:background="@drawable/circle_bcg"
            android:src="@drawable/ic_launcher" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_margin="10dp"
        android:layout_marginTop="10dp"
        android:layout_weight=".5"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/imageView4"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_margin="5dp"
            android:layout_weight=".5"
            android:background="@drawable/circle_bcg"
            android:src="@drawable/ic_launcher" />

        <ImageView
            android:id="@+id/imageView3"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_margin="5dp"
            android:layout_weight=".5"
            android:background="@drawable/circle_bcg"
            android:src="@drawable/ic_launcher" />
    </LinearLayout>

</LinearLayout>

步骤3:现在,由于水平布局将包含一系列按钮,我们可以定义一个单独的布局来保存我们按钮的外观,请在下面另一个单独的xml文件中说button_view.xml

<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/button"
    android:layout_width="100dp"
    android:layout_height="48dp"
    android:gravity="center"
    android:text="press" >

</Button>

第4步:好的,现在我们完成了所有基本组件,现在我们将定义我们的主要布局,将所有这些组合在一起,这是您的主要布局,必须为您的活动设置内容布局。它包含这些组件,一个Horizo​​ntalScroll视图,它将保存动态膨胀的按钮,以及一个ViewGroup(LinearLayout),当点击任何一个按钮时,它将显示在步骤2中定义的View。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.testproject.MainActivity" >

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_margin="5dp" >

        <LinearLayout
            android:id="@+id/hviewButton"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="horizontal" >
        </LinearLayout>
    </HorizontalScrollView>

    <LinearLayout
        android:id="@+id/hviewCircle"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >
    </LinearLayout>

</LinearLayout>

在执行此操作后,您已完成设置,您需要手中的视图显示逻辑,现在让我们测试一下,当按下按钮时,活动代码将生成类似于原始图像的视图。

public class MainActivity extends Activity {

    private ViewGroup hViewButton;
    private ViewGroup hViewCircle;
    private LayoutInflater mInflater;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mInflater = LayoutInflater.from(this);
        hViewButton = (ViewGroup)findViewById(R.id.hviewButton);
        hViewCircle = (ViewGroup)findViewById(R.id.hviewCircle);

        // am assuming 10 button, you need to figure out 
        // actual number of button to be displayed.
        for(int i = 0 ; i < 10 ; i++){
            Button button = (Button)mInflater.inflate(R.layout.button_view,
                    null, false);
            hViewButton.addView(button);

            button.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View v) {
                    hViewCircle.removeAllViews();


                    View imageGroup = mInflater.
                            inflate(R.layout.hcell_view,hViewCircle,false);
                    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                            LinearLayout.LayoutParams.MATCH_PARENT);
                    imageGroup.setLayoutParams(params);
                    hViewCircle.addView(imageGroup);
                }
            });
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

我们的基本实现到此结束,正如您稍后所说的那样,这组4个图像必须以任意方式滚动,为此,您可以采用与Buttons类似的方法,您可以拥有单独的Horizo​​ntalScrollView / ViewPager / ViewFlipper用于保存图像组,计算需要显示的图像组数量到数据检索逻辑,并用户任何建议的小部件将它们显示为可交换视图。