2017-07-31 15:16:39 dongqiushan 阅读数 14370
  • Android APP开发】Android商业布局实现

    Android UI布局视频教程,如果进行Android商业项目的开发,界面的UI是非常重要的,因为这直接关系到项目的用户体验、客户的认可度等方面,甚至会影响项目的估值。该课程包括Android ui界面设计、UI如何更新等。

    13721 人正在学习 去看看 CSDN讲师

发先一个ViewGroup超好用的属性。
android:clipChildren 是否裁剪子布局

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.dqs.shangri.clipchildren.MainActivity"
    android:clipChildren="false">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:layout_marginTop="200dp"
        android:background="@color/colorAccent"
        android:gravity="bottom">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!"
            android:layout_gravity="center_vertical"/>

        <ImageView
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:background="@color/colorPrimary"/>
    </LinearLayout>

</FrameLayout>

效果图:
这里写图片描述

其中蓝色部分已经超出了父布局。
奇妙无比,可以完成许多设计想出的方案。。。。。。。。。。

为什么会发现这个东西呢。是因为最近做个自定义布局。会自动填充内容,长度不可预期,内容为一个textView,文案长度不固定。之后会做一个动画从屏幕右方票到屏幕左方。

一切都做好了,但是动画播出后,ViewGroup被裁剪了,只剩下屏幕宽度。所以才找出了这个属性。但是单凭这个属性还不够,还有另外一个步骤就是:自定义的这个布局要继承HorizontalScrollView

  • HorizontalScrollView 水平超出屏幕范围;
  • ScrollView 当竖直超出屏幕范围。
android:clipChildren="false"

改属性一定写到跟布局。

下面是源码:

public class MosaicBgViewGroup extends HorizontalScrollView {
    private Logger logger = Logger.getLogger(getClass());

    private AnimatorSet animatorSet;
    private RelativeLayout rootView;
    private View childView;
    private LinearLayout loadCarryingBgLy;
    private LinearLayout contentLy;
    private ImageView headerView;
    private ImageView tailView;

    private int headerViewResId;
    private int tailViewResId;
    private int middleViewResId;

    private int middleViewMarginLeft = DisplayUtil.dip2px(getContext(), 25);

    private int tailViewEffectiveSpace = DisplayUtil.dip2px(getContext(), 0.5f);

    public MosaicBgViewGroup(Context context) {
        super(context);
    }

    public MosaicBgViewGroup(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MosaicBgViewGroup(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public void initResId(@DrawableRes int headerViewResId, @DrawableRes int tailViewResId,
                          @DrawableRes int middleViewResId) {
        this.headerViewResId = headerViewResId;
        this.tailViewResId = tailViewResId;
        this.middleViewResId = middleViewResId;
    }

    public void setMiddleViewMarginLeft(int middleViewMarginLeft) {
        this.middleViewMarginLeft = middleViewMarginLeft;
    }

    public void setTailViewEffectiveSpace(int tailViewEffectiveSpace) {
        this.tailViewEffectiveSpace = tailViewEffectiveSpace;
    }

    public void addChildView(View view) {
        if (view == null || headerViewResId == 0 || tailViewResId == 0 || middleViewResId == 0) {
            logger.error("add child view is null!");
            return;
        }
        removeAllViews();
        rootView = new RelativeLayout(getContext());

        childView = view;
        contentLy = new LinearLayout(getContext());
        contentLy.setOrientation(LinearLayout.HORIZONTAL);

        initHeaderView();
        initTailView();
        initLoadCarryingBgLy();

        rootView.addView(loadCarryingBgLy);
        contentLy.addView(headerView);
        contentLy.addView(childView);
        rootView.addView(contentLy);

        addView(rootView);
    }

    public void runAnim(AnimatorSet animatorSet) {
        if (animatorSet == null) {
            logger.error("run anim error, anim null!");
            return;
        }
        this.animatorSet = animatorSet;
        this.animatorSet.start();
    }

    private void initHeaderView() {
        headerView = new ImageView(getContext());
        headerView.setScaleType(ImageView.ScaleType.CENTER);
        headerView.setImageResource(headerViewResId);
    }

    private void initTailView() {
        tailView = new ImageView(getContext());
        tailView.setScaleType(ImageView.ScaleType.CENTER);
        tailView.setImageResource(tailViewResId);
    }

    private void initLoadCarryingBgLy() {
        loadCarryingBgLy = new LinearLayout(getContext());
        loadCarryingBgLy.setPadding(middleViewMarginLeft, 0, 0, 0);
        loadCarryingBgLy.setOrientation(LinearLayout.HORIZONTAL);
        for (int i = 0; i < getMiddleCount(); i++) {
            ImageView view = new ImageView(getContext());
            view.setScaleType(ImageView.ScaleType.CENTER);
            view.setBackgroundResource(middleViewResId);

            loadCarryingBgLy.addView(view);
        }
        loadCarryingBgLy.addView(tailView);
    }

    private int getChildViewWidth(View view) {
        int spec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
        view.measure(spec,spec);
        return view.getMeasuredWidth();
    }

    private int getMiddleCount() {
        int diff = ((getChildViewWidth(childView) % getMiddleWidth()) >= tailViewEffectiveSpace ? 1 : 0) + 1;
        return (getChildViewWidth(childView) / getMiddleWidth()) + diff;
    }

    private int getMiddleWidth() {
        View view = new View(getContext());
        view.setBackgroundResource(middleViewResId);
        return getChildViewWidth(view);
    }
}
2018-11-07 11:33:59 cipay 阅读数 304
  • Android APP开发】Android商业布局实现

    Android UI布局视频教程,如果进行Android商业项目的开发,界面的UI是非常重要的,因为这直接关系到项目的用户体验、客户的认可度等方面,甚至会影响项目的估值。该课程包括Android ui界面设计、UI如何更新等。

    13721 人正在学习 去看看 CSDN讲师

LinearLayout(线性布局)
线性布局:水平、垂直显示,如果有多个组件,超出屏幕大小,超出
就不显示,可以通过android:orientation来定义方向。
android:orientation=“horizontal”表示水平方向
android:orientation=“vertical”表示垂直方向
在这里插入图片描述

TableLayout(表格布局)

  1. Tablelayout实现边框
    默认的是没有边框的 实现边框 可以通过不同的背景颜色去实现
  2. Tablelayout常用属性
     android:stretchColumns="1"是设置 TableLayout所有行的第二列为扩展列。
    Id从0开始,1代表第二列。也就是说如果每行都有三列的话,剩余的空间
    由第二列补齐
     collapseColumns – 设置隐藏那些列,列ID从0开始,多个列的话用”,”分隔。
     stretchColumns –
    设置自动伸展那些列,列ID从0开始,多个列的话用”,”分隔。
     shrinkColumns -
    设置自动收缩那些列,列ID从0开始,多个列的话用”,”分隔。可以用”*”来
    表示所有列,同一列可以同时设置为shrinkable和stretchable。

FrameLayout(帧布局)
框架布局是将控件组织在Android程序的用户界面中最简单的布局类型之一
。框架布局在xml文件中使用来定义。框架布局中的子视图总是
被绘制到相对于屏幕的左上角上,所有添加到这个布局中的视图都是以层叠的
方式显示,第一个添加到框架布局中的视图显示在最底层,最后一个被放在最
顶层,上一层的视图会覆盖下一层的视图,类似于html中的div。
帧布局的运行效果图:

在这里插入图片描述

RelativeLayout(相对布局)
相对布局是实际布局中最常用的布局方式之一。相
来定义。相对布局可以设置某一个视图
,这些位置可以包括上下左右等,因而相较于其他的布
灵活性。
下面通过代码实现一个相对布局。创建工程步骤跟
接给出布局文件盒运行效果。运行效果图如下所示:
在这里插入图片描述

2015-07-29 16:04:51 myapplication 阅读数 940
  • Android APP开发】Android商业布局实现

    Android UI布局视频教程,如果进行Android商业项目的开发,界面的UI是非常重要的,因为这直接关系到项目的用户体验、客户的认可度等方面,甚至会影响项目的估值。该课程包括Android ui界面设计、UI如何更新等。

    13721 人正在学习 去看看 CSDN讲师

今天导入一段别人写的计算器源码,运行后发现编辑框里的数字有一部分在屏幕外面,如下图所示:


但是我的布局设置的是match parent,无法理解为什么会出现这种情况。

<EditText android:id="@+id/result" 
            android:layout_width="match_parent" 
            android:layout_height="wrap_content" 
            android:background="@android:drawable/editbox_background" 
            android:layout_span="4" 
            android:textSize="48sp" 
            android:gravity="right|center_vertical" 
            android:cursorVisible="false" 
            android:editable="true" 
            android:lines="1"  /> 

后来我进入到Graphical layout中预览,发现也是这种情况,如下图所示:


后来将Api22调到Api17,发现Graphical layout中预览的编辑框终于不超出屏幕外了:

自此,我以为问题解决了。运行程序结果编辑框还是在屏幕外。百撕不得骑姐。。

后来尝试无数次,最后在加入layout_weight属性才终于解决问题,什么原因现在还不清楚。

        <EditText android:id="@+id/result" 
            android:layout_width="match_parent" 
            android:layout_height="wrap_content" 
            android:background="@android:drawable/editbox_background" 
            android:layout_span="4" 
            android:textSize="48sp" 
            android:gravity="right|center_vertical" 
            android:cursorVisible="false" 
            android:editable="true" 
            android:lines="1" 
            android:layout_weight="1" /> 

2015-12-03 12:19:02 Buaaroid 阅读数 5218
  • Android APP开发】Android商业布局实现

    Android UI布局视频教程,如果进行Android商业项目的开发,界面的UI是非常重要的,因为这直接关系到项目的用户体验、客户的认可度等方面,甚至会影响项目的估值。该课程包括Android ui界面设计、UI如何更新等。

    13721 人正在学习 去看看 CSDN讲师

1.把上面XMLgone掉 。

2.将视图的屏幕切换到5.1寸的,就可以看到很长的布局了。

3.可以试试将scrollView设置为root节点。你之所以嵌套了scrollview后还是不能显示全部,是因为你的scrollview不是父控件。你要把scrollview放在最外面,也就是将 xmlns:android="http://schemas.android.com/apk/res/android 放在scrollview里。这样就会显示全屏,当全屏的界面处理好之后,再将scrollview放入应该放的位置。 

2018-11-26 14:13:44 shanshan_1117 阅读数 4308
  • Android APP开发】Android商业布局实现

    Android UI布局视频教程,如果进行Android商业项目的开发,界面的UI是非常重要的,因为这直接关系到项目的用户体验、客户的认可度等方面,甚至会影响项目的估值。该课程包括Android ui界面设计、UI如何更新等。

    13721 人正在学习 去看看 CSDN讲师

最近使用  NestedScrollView   嵌套使其布局超出屏幕时滑动; 想让最后一个子布局位于屏幕最底方;

各种方法都不行,后来发现NestedScrollView 的 子布局不能撑满整个屏幕,而是包裹内容,按照wrap_content来计算,哪怕写的 match_parent 也没用;

解决办法:

添加属性:

android:fillViewport="true"  
 <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        android:overScrollMode="never">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            .....

        </LinearLayout>
</android.support.v4.widget.NestedScrollView>

 

android五大布局

阅读数 226

没有更多推荐了,返回首页