我的任务如图所示
水平滚动视图包含一组按钮,用于例如: - 11个按钮,当点击1时,它将包含需要从服务器端检索的数据,并且应该如下排列(即每个窗口只有四个圆圈)稍后我们需要滚动它们或滑动窗口以查看剩余的)。水平滚动视图是静态的,但它的下方是动态的,如何安排它们请给我建议。我试过线性布局,但它没有奏效。抱歉英语不好。因为我是android的新手,我无法做到。请帮助我。
答案 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步:好的,现在我们完成了所有基本组件,现在我们将定义我们的主要布局,将所有这些组合在一起,这是您的主要布局,必须为您的活动设置内容布局。它包含这些组件,一个HorizontalScroll视图,它将保存动态膨胀的按钮,以及一个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类似的方法,您可以拥有单独的HorizontalScrollView / ViewPager / ViewFlipper用于保存图像组,计算需要显示的图像组数量到数据检索逻辑,并用户任何建议的小部件将它们显示为可交换视图。