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

    发先一个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);
        }
    }
    展开全文
  • 2.将视图的屏幕切换到5.1寸的,就可以看到很长的布局了。 3.可以试试将scrollView设置为root节点。你之所以嵌套了scrollview后还是不能显示全部,是因为你的scrollview不是父控件。你要把scrollview放在最外面,也...
    1.把上面XMLgone掉 。

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

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

    展开全文
  • 如果只使用ListView就可以实现,无论ListView中的内容超出屏幕多少,因为其自带一个滚动条可以 看,但是怎么给布局也弄上一个,而且设置为不现实滚动条。
  • android 开发解决控件超出屏幕,不显示问题

    可使用控件ScrollView来做下翻滚动条,但是官方称,ScrollView内部只能包含一个控件

    这样就可以无限加控件了,如下:

    <ScollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">
    
        <LinearLayout
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical" >
    
    </ScrollView>
    展开全文
  • 使用 scrollview 来使内容滑动。 去除滑动条 android:scrollbars=...使用 scrollview 包住布局内容 <ScrollView android:id="@+id/scrollView" app:layout_constraintTop_toTopOf="parent" android:layo...

    使用 scrollview 来使内容滑动。

    去除滑动条
     	android:scrollbars="none"
    
    使用 scrollview 包住布局内容
    <ScrollView
            android:id="@+id/scrollView"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scrollbars="none"
            >
            
    <!--        包住什么样的布局没有限制-->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                >
    <!--            控件内容-->
            </LinearLayout>
            </ScrollView>
    
    
    实例
     <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout
        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="wrap_content"
        tools:context=".ui.context.ContextFragment">
        <ScrollView
            android:id="@+id/scrollView1"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scrollbars="none"
            >
    <!--        包住什么样的布局没有限制-->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                >
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="300dp"
                    android:background="#39A8DF"
                    />
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="300dp"
                    android:background="#39DFDF"
                    />
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="300dp"
                    android:background="#39A8DF"
                    />
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="300dp"
                    android:background="#39DFDF"
                    />
            </LinearLayout>
    
        </ScrollView>
    
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    在这里插入图片描述

    展开全文
  • 我用webview的loaddatawithbaseurl加载html字符串,但是内容的宽度超出屏幕的宽度了,网上搜的setlayoutalgorithm方法没用啊!我想要的效果是内容最多只显示屏幕的宽度,多了就进入下一行,以上方法无效,4.4版本...
  • android:clipChildren=“false” 在根布局加入 此属性即可

    android:clipChildren=“false” 在根布局加入 此属性即可
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 屏幕适配问题,经常弄得头疼,谷歌终于在2015年中旬的推出android-percent-support 这个库,解决了基本适配问题。 android-percent-support 这个库提供了2个百分比布局 PercentRelativeLayout,...
  • 想使用gridlayout实现计算器,发现子控件button会超出界面。改用其他布局可达成我想要的效果。但是如果不改用其他布局的话应该如何解决?? 尝试过给子控件button加上: android:layout_gravity="fill_...
  • 安卓开发,滚动条制作
  • 在TableRow中,有两个TextView控件,一个标题,一个内容,内容TextView中的文字数量是动态获取的,可能多,可能少,如果多的话就自动换行,所以,如果把内容TextView的宽度写成wrap_content,会有超出部分屏幕的情况...
  • 1.使用css处理 img{ width: 84vw;...另外一种让图片不超出屏幕范围的方法,现在用的是css var tables = document.getElementsByTagName("img"); //找到table标签 for(var i = 0; i<tables.length
  • 布局的时候,有些页面往往一个页不够用,超出了许多,所以用到到了滑动。 上下滑动 主要时ScrollView 将原有的 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_...
  • 有时候用笔记本做Android开发,启动模拟器的时候发现Android模拟器的大小比桌面还大,无法看全整个屏幕,有木有。看下图: 解决办法: 1、点击run configuration 2、切换到Target选项卡 4、输入 -scale 0.8 ...
  • 今天导入一段别人写的计算器源码,运行后发现编辑框里的数字有一部分在屏幕外面,如下图所示: 但是我的布局设置的是match parent,无法理解为什么会出现这种情况。  android:layout_width="match_parent...
  • 问题描述:这是一个简单的网格布局应用,计算器界面,代码如下: < GridLayout xmlns: android = "http://schemas.android.com/apk/res/android" xmlns: tools = "http://schemas.android.com/tools" ...
  • 我的布局中有五个组件组成了横向的chain,链接设置之后发现超出屏幕。 经过查找,发现问题处在app:layout_constraintWidth_percent上,之前为了让组件按照比例显示设置了这个参数,现在看来这个参数的优先级要...
  • 在屏幕边缘显示一张图片,超出屏幕宽度时,只显示图片的左边部分,并且不被挤压,其余部分剪切。但我在实际开发中,踩了个坑,这里做个记录,下面通过图片直观了解一下情况: 理想 现实 目前可以...
  • GridLayout填充屏幕窗体
  • 2.将视图的屏幕切换到5.1寸的,就可以看到很长的布局了。 3.可以试试将scrollView设置为root节点。你之所以嵌套了scrollview后还是不能显示全部,是因为你的scrollview不是父控件。你要把scrollview放在最外面,也...
1 2 3 4 5 ... 20
收藏数 8,652
精华内容 3,460