开发者社区 问答 正文

Android动态设置布局里如何设置子布局的位置?

就是平时新闻或者广告的定时滑动,广告底边不是有一条半透明的带和可以跟随滑动的几个圆点,我用LayoutParams写的布局,结果出来效果 圆点全叠在一起了,那半透明的带也在顶部去了,我想知道怎么才能把圆点分开且半透明的带也在底部?谢谢了!

    public class FragmentDemo extends Fragment {
    private ImageView mImageIds[];
    private int index=0;//记录选中的图片位置
    private static final int IMAGE_COUNT=3;//小圆点个数
    Gallerys_Advertisement gallery;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    //整个Tabs之下的容器
    LayoutParams SclayoutParams=new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.MATCH_PARENT);
    ScrollView scrollView=new ScrollView(getActivity());
    scrollView.setLayoutParams(SclayoutParams);
    //界面布局容器一
    RelativeLayout R2Layout=new RelativeLayout(getActivity());
    LayoutParams R2params=new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
    R2Layout.setLayoutParams(R2params);
        //画廊
        LayoutParams galleryParams=new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
        gallery=new Gallerys_Advertisement(getActivity());
        gallery.setFadingEdgeLength(0);//消除图片两边的阴影
        gallery.setSpacing(0);
        gallery.setLayoutParams(galleryParams);
        //界面布局容器二
        RelativeLayout relativeLayout=new RelativeLayout(getActivity());

        //原来Layoutparams设置布局要使用Margins必须要加容器类型在Params语句前如下:RelativeLayout。
        RelativeLayout.LayoutParams RRparams=new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT,50);
        //      RRparams.setMargins(0, 0, 0, 0);
        relativeLayout.setBackgroundColor(getResources().getColor(R.drawable.beijingse));//设置自定义背景色
        relativeLayout.setLayoutParams(RRparams);
        relativeLayout.setGravity(Gravity.CENTER);//确定圆点位置居中

        //三张图
        LayoutParams IVparams1=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        ImageView imageView1=new ImageView(getActivity());
        imageView1.setImageDrawable(getResources().getDrawable(R.drawable.ic_dot_focused));//重点:添加自定义图片
        imageView1.setLayoutParams(IVparams1);



        LayoutParams IVparams2=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        ImageView imageView2=new ImageView(getActivity());
        imageView2.setImageDrawable(getResources().getDrawable(R.drawable.ic_dot_normal));//重点:添加自定义图片
        imageView2.setLayoutParams(IVparams2);



        LayoutParams IVparams3=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        ImageView imageView3=new ImageView(getActivity());
        imageView3.setImageDrawable(getResources().getDrawable(R.drawable.ic_dot_normal));//重点:添加自定义图片
        imageView3.setLayoutParams(IVparams3);



        relativeLayout.addView(imageView1);
        relativeLayout.addView(imageView2);
        relativeLayout.addView(imageView3);
        R2Layout.addView(gallery);
        R2Layout.addView(relativeLayout);
        scrollView.addView(R2Layout);

        mImageIds=new ImageView[]{imageView1,imageView2,imageView3};
        mImageIds[0].setImageDrawable(getActivity().getResources().getDrawable(R.drawable.ic_dot_focused));
        ImgAdapter Gadapter=new ImgAdapter(getActivity());
        gallery.setAdapter(Gadapter);

    // Timer timer=new Timer();
    // timer.schedule(task, 2000,2000);
    // gallery.setOnItemSelectedListener(onItemSelectedListener);
        return scrollView;
    }

展开
收起
WM云建站 2016-02-17 22:37:09 4129 分享
分享
版权
举报
阿里云 AI 助理回答

要实现你所描述的效果,即让小圆点分开显示在底部,并且半透明的带状背景也在底部,关键在于正确地使用RelativeLayout或者LinearLayout来布局,并合理设置每个视图的LayoutParams。从你的代码中可以看出,问题可能出在如何正确地定位和分布这些小圆点上。

分离小圆点

  1. 使用LinearLayout:对于小圆点,可以考虑将它们放在一个水平的LinearLayout中,这样更容易控制它们的排列和间距。

  2. 设置权重(weight):如果希望小圆点等宽并均匀分布,可以在LinearLayout中为每个ImageView设置相等的权重。

  3. 调整位置:确保包含小圆点的RelativeLayout或LinearLayout被正确放置在Gallery下方,可以通过设置合适的layout_below属性(如果是RelativeLayout)或者直接在LinearLayout中顺序添加来实现。

示例代码修改

下面是一个简化的示例,展示了如何调整布局以达到期望效果:

// 界面布局容器二,用于放置Gallery和指示器布局
RelativeLayout containerLayout = new RelativeLayout(getActivity());
LayoutParams containerParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
containerLayout.setLayoutParams(containerParams);

// 画廊
gallery.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
gallery.setFadingEdgeLength(0);
gallery.setSpacing(0);
containerLayout.addView(gallery); // 先添加Gallery

// 小圆点容器,使用LinearLayout便于控制布局
LinearLayout dotContainer = new LinearLayout(getActivity());
dotContainer.setOrientation(LinearLayout.HORIZONTAL);
dotContainer.setGravity(Gravity.CENTER_HORIZONTAL); // 水平居中
LayoutParams dotContainerParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
dotContainerParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); // 放置在底部
dotContainer.setLayoutParams(dotContainerParams);

// 添加小圆点到LinearLayout
for (int i = 0; i < IMAGE_COUNT; i++) {
    ImageView imageView = new ImageView(getActivity());
    imageView.setImageDrawable(i == 0 ? getResources().getDrawable(R.drawable.ic_dot_focused) : getResources().getDrawable(R.drawable.ic_dot_normal));
    LinearLayout.LayoutParams dotParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    if (i > 0) { // 除了第一个,其他小圆点之间加间隔
        dotParams.setMargins(5, 0, 0, 0); // 左边距5dp,可根据需要调整
    }
    dotContainer.addView(imageView, dotParams);
}
containerLayout.addView(dotContainer); // 最后添加小圆点容器

// 将整个布局加入ScrollView
scrollView.addView(containerLayout);

这段代码首先创建了一个包含Gallery的RelativeLayout作为主要容器,并确保Gallery先被添加。然后,创建了一个水平的LinearLayout来专门存放小圆点,并通过设置其LayoutParams将其定位到底部。每个小圆点之间通过设置左边距实现了分隔。最后,将这个包含Gallery和小圆点容器的RelativeLayout加入到ScrollView中。

请根据实际情况调整资源ID、尺寸和间距等参数。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等