Code Monkey home page Code Monkey logo

android-percent-support-extend's Introduction

android-percent-support-extend

对于android-percent-support的扩展库。

目前支持:

  1. 不改变原有库的用法
  2. 添加了PercentLinearLayout
  3. 支持宽度高度百分比设置值
  4. 支持margin百分比设置值
  5. 支持padding百分比设置值
  6. 支持minWidth , maxWidth , minHeight , maxHeight百分比设置值
  7. 支持TextView、Button、EditText的textSize
  8. 支持ScrollView内部为Linearlayout
  9. 支持任何View的尺寸参照屏幕的宽或者高

目前最新版本为,尽可能使用最新版本,源码和demo在github中:

compile 'com.zhy:percent-support-extends:1.1.1'

一 扩展的功能

对于官方库,做了如下的改变:

  1. 不改变原有库的用法

  2. 添加了PercentLinearLayout

  3. 支持百分比指定特定的参考值,比如宽度或者高度。

    例如:

    app:layout_heightPercent="50%w"
    app:layout_marginPercent="15%w"
    app:layout_marginBottomPercent="20%h"
  4. 支持通过app:layout_textSizePercent设置textView(button,editText)的textSize

    例如:

     <TextView
          app:layout_textSizePercent="3%h"
     />
  5. 对于外层套ScrollView的问题,目前可以在PercentLinearLayout 的外层使用ScrollView,不过对于宽度的百分比参考的就是android.R.id.content的高度(因为,无法参考父控件的高度,父控件的高度理论上依赖于子View高度,且模式为UNSPECIFIED)。

  6. 支持minWidth,maxWidth,minHeight,maxHeight的支持。

    例如:

    app:layout_maxWidthPercent
    app:layout_maxHeightPercent
    app:layout_minWidthPercent
    app:layout_minWidthPercent

    (注:用法和maxHeight等一致,如果使用:值会覆盖原本的maxHeight等属性)。

  7. 支持padding百分比设置值

    例如:

    app:layout_paddingBottomPercent="8%w"
    app:layout_paddingLeftPercent="2%w"
    app:layout_paddingRightPercent="4%w"
    app:layout_paddingTopPercent="6%w"
  8. 支持任何尺寸参考屏幕的宽或者高

<ImageView
  //...
   app:layout_heightPercent="30%sh"
   app:layout_widthPercent="30%sh"/>

二 为什么要扩展这个库

首先我们回顾下百分比布局库的用法,提供了PercentRelativeLayoutPercentFrameLayout供大家在编写的时候,对于以下属性:

layout_widthPercentlayout_heightPercentlayout_marginPercentlayout_marginLeftPercentlayout_marginTopPercentlayout_marginRightPercentlayout_marginBottomPercentlayout_marginStartPercentlayout_marginEndPercent

可以使用百分比进行设置宽、高、边距,的确给我们在适配上提供了极大的便利,但是在使用过程中,觉得存在一些场景无法得到满足。什么场景呢?下面我举几个例子。

  1. 当使用图片时,无法设置宽高的比例

    比如我们的图片宽高是200*100的,我们在使用过程中我们设置宽高为20%、10%,这样会造成图片的比例失调。为什么呢?因为20%参考的是屏幕的宽度,而10%参考的是屏幕的高度。

  2. 很难使用百分比定义一个正方形的控件

    比如,我现在界面的右下角有一个FloatingActionButton ,我希望其宽度和高度都为屏幕宽度的10%,很难做到。

  3. 一个控件的margin四个方向值一致

    有些时候,我设置margin,我希望四边的边距一致的,但是如果目前设置5%,会造成,上下为高度的5%,左右边距为宽度的5%。

综合上述这些问题,可以发现目前的percent-support-lib并不能完全满足我们的需求,所以我们考虑对其进行扩展。说白了,我们就希望在布局的时候可以自己设定参考看度还是高度,比如上述2,我们对于宽高可以写成10%w,10%w。也就是在不改变原库的用法的前提下,添加一些额外的支持。

三 用法

Android Studio

对于如何导入,也是相当的简单,android studio的用户,直接:

dependencies {
    //...
    compile 'com.zhy:percent-support-extends:1.0.7'
}

不需要导入官方的percent-support-lib了。

对于的三个类分别为:

com.zhy.android.percent.support.PercentLinearLayout
com.zhy.android.percent.support.PercentRelativeLayout
com.zhy.android.percent.support.PercentFrameLayout

###支持的属性 :

  • layout_heightPercent
  • layout_widthPercent
  • layout_marginBottomPercent
  • layout_marginEndPercent
  • layout_marginLeftPercent
  • layout_marginPercent
  • layout_marginRightPercent
  • layout_marginStartPercent
  • layout_marginTopPercent
  • layout_textSizePercent
  • layout_maxWidthPercent
  • layout_maxHeightPercent
  • layout_minWidthPercent
  • layout_minHeightPercent
  • layout_paddingPercent
  • layout_paddingTopPercent
  • layout_paddingBottomPercent
  • layout_paddingLeftPercent
  • layout_paddingRightPercent

对于值可以取:10%w , 10%h , 10% , 10%sw , 10%sh

四 具体的示例

Demo 1 [基本用法,主要测试w,h后缀]

xml:

<?xml version="1.0" encoding="utf-8"?>


<com.zhy.android.percent.support.PercentFrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.zhy.android.percent.support.PercentFrameLayout
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_gravity="center"
        android:background="#ff44aacc"
        app:layout_heightPercent="50%w"
        app:layout_widthPercent="50%w">

        <com.zhy.android.percent.support.PercentFrameLayout
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_gravity="center"
            android:background="#ffcc5ec7"
            app:layout_heightPercent="50%w"
            app:layout_widthPercent="50%w">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="center"
                android:background="#ff7ecc16"
                android:gravity="center"
                android:text="margin 15% of w"
                app:layout_marginPercent="15%w"
                />

        </com.zhy.android.percent.support.PercentFrameLayout>

    </com.zhy.android.percent.support.PercentFrameLayout>

    <TextView android:layout_width="0dp"
              android:layout_height="0dp"
              android:layout_gravity="bottom|right"
              android:background="#44ff0000"
              android:gravity="center"
              android:text="15%w,15%w"
              app:layout_heightPercent="15%w"
              app:layout_marginPercent="5%w"
              app:layout_widthPercent="15%w"/>


</com.zhy.android.percent.support.PercentFrameLayout>

Demo 2 [基本用法,主要测试w,h后缀]

xml:

<?xml version="1.0" encoding="utf-8"?>
<com.zhy.android.percent.support.PercentFrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/id_test"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_gravity="left|top"
        android:background="#44ff0000"
        android:gravity="center"
        android:onClick="test1"
        android:text="width:30%,height:20%"
        app:layout_heightPercent="20%"
        app:layout_widthPercent="30%"/>

    <TextView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_gravity="right|top"
        android:background="#4400ff00"
        android:gravity="center"
        android:text="width:70%,height:20%"
        app:layout_heightPercent="20%"
        app:layout_widthPercent="70%"/>


    <TextView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_gravity="bottom"
        android:background="#770000ff"
        android:gravity="center"
        android:text="width:100%,height:10%"
        app:layout_heightPercent="10%"
        app:layout_widthPercent="100%"/>


    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:scaleType="centerCrop"
        android:src="@drawable/tangyan"
        app:layout_heightPercent="50%h"
        app:layout_widthPercent="50%w"/>

    <TextView
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_heightPercent="10%h"
        app:layout_widthPercent="10%h"
        android:text="10%h,10%h"
        android:gravity="center"
        android:layout_gravity="bottom|right"
        android:background="#44ff0000"
        app:layout_marginBottomPercent="20%h"
        app:layout_marginRightPercent="10%"/>


</com.zhy.android.percent.support.PercentFrameLayout>


ok,例子都比较简单,主要就一个布局文件,可以看出上述我们可以给宽度、高度,边距等指定参考值为宽度或者高度。这样的话,在保证图片宽、高比例、控件设置为正方形等需求就没问题了。


接下来还有个例子,功能主要是设置TextView对于textSize的百分比设置;以及对于ScrollView的支持。当然了,对于ScrollView的支持,这个理论上是不支持的,因为大家都清楚,如果PercentLinearLayout在ScrollView中,那么高度的模式肯定是UNSPECIFIED,那么理论上来说高度是无限制的,也就是依赖于子View的高度,而百分比布局的高度是依赖于父View的高度的,所有是互斥的。而我们支持是:考虑到编写代码的时候,大多参考的是屏幕高度(android.R.id.content)的高度,所以如果在ScrollView中,编写10%h,这个百分比是依赖于屏幕高度的(不包括ActionBar的高度)。

Demo 3 [测试textSize、ScrollView]

xml:

<?xml version="1.0" encoding="utf-8"?>

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.zhy.android.percent.support.PercentLinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:background="#ff44aacc"
            android:gravity="center"
            android:text="width:60%,height:5%,ts:3%"
            android:textColor="#ffffff"
            app:layout_heightPercent="5%"
            app:layout_marginBottomPercent="5%"
            app:layout_textSizePercent="3%"
            app:layout_widthPercent="60%"/>

        <TextView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:background="#ff4400cc"
            android:gravity="center"
            android:text="width:70%,height:10%"
            android:textColor="#ffffff"
            app:layout_heightPercent="10%"
            app:layout_marginBottomPercent="5%"
            app:layout_widthPercent="70%"/>
        <TextView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:background="#ff44aacc"
            android:gravity="center"
            android:text="w:80%,h:15%,textSize:5%"
            android:textColor="#ffffff"
            app:layout_heightPercent="15%"
            app:layout_marginBottomPercent="5%"
            app:layout_textSizePercent="5%"
            app:layout_widthPercent="80%"/>
        <TextView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:background="#ff4400cc"
            android:gravity="center"
            android:text="width:90%,height:5%"
            android:textColor="#ffffff"
            app:layout_heightPercent="20%"
            app:layout_marginBottomPercent="5%"
            app:layout_widthPercent="90%"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:background="#ff44aacc"
            android:gravity="center"
            android:text="width:100%,height:25%"
            android:textColor="#ffffff"
            app:layout_heightPercent="25%"
            app:layout_marginBottomPercent="5%"
            />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:background="#ff44aacc"
            android:gravity="center"
            android:text="width:100%,height:30%"
            android:textColor="#ffffff"
            app:layout_heightPercent="30%"
            app:layout_marginBottomPercent="5%"
            />


    </com.zhy.android.percent.support.PercentLinearLayout>
</ScrollView>

上面的第三个TextView的字体设置的就是5%(默认参考容器高度)。整个PercentLinearLayout在ScrollView中。ok~ 姑且这样,由于源码比较简单,大家可以根据自己的实际需求去修改,前提尽可能不要改变原有的功能。

Demo 4 [参照屏幕的宽或者高进行布局]

thx for Sunday~

<?xml version="1.0" encoding="utf-8"?>
<com.zhy.android.percent.support.PercentFrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/id_test"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_gravity="left|top"
        android:background="#44ff0000"
        android:gravity="center"
        android:onClick="test1"
        android:text="width:30%sw,height:20%sh"
        app:layout_heightPercent="20%sh"
        app:layout_widthPercent="30%sw"/>

    <TextView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_gravity="right|top"
        android:background="#4400ff00"
        android:gravity="center"
        android:text="width:70%sw,height:20%sh"
        app:layout_heightPercent="20%sh"
        app:layout_widthPercent="70%sw"/>


    <TextView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_gravity="bottom"
        android:background="#770000ff"
        android:gravity="center"
        android:text="width:100%,height:10%sw"
        app:layout_heightPercent="10%sw"
        app:layout_widthPercent="100%"/>


    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:scaleType="centerCrop"
        android:src="@drawable/tangyan"
        app:layout_heightPercent="30%sh"
        app:layout_widthPercent="30%sh"/>

    <TextView
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_heightPercent="10%sh"
        app:layout_widthPercent="10%sh"
        android:text="10%sh,10%sh"
        android:gravity="center"
        android:layout_gravity="bottom|right"
        android:background="#44ff0000"
        app:layout_marginBottomPercent="15%sw"
        app:layout_marginRightPercent="10%sw"/>


</com.zhy.android.percent.support.PercentFrameLayout>

About me


==> 接下来是原库的用法:

Android Percent Support Lib Sample 📐📐📐

Android Arsenal

I made a sample of the new percent support library.
It will be documented soon on android dev website so it's just a proof of concept :)
You can check official docs reference here

This library provide percentage based layouts, horizontal and vertical at the same time.

simple result

PercentRelativeLayout

complex result

PercentRelativeLayout Complex
from https://gist.github.com/shekarshine/5458f697c02e5619b0e2

How to use :

just add percent support library to your project

dependencies {
    compile 'com.android.support:percent:22.2.0'
}

###Supported Layouts :

####PercentRelativeLayout

<android.support.percent.PercentRelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <View
        android:id="@+id/top_left"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_alignParentTop="true"
        android:background="#ff44aacc"
        app:layout_heightPercent="20%"
        app:layout_widthPercent="70%" />

    <View
        android:id="@+id/top_right"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/top_left"
        android:background="#ffe40000"
        app:layout_heightPercent="20%"
        app:layout_widthPercent="30%" />


    <View
        android:id="@+id/bottom"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_below="@+id/top_left"
        android:background="#ff00ff22"
        app:layout_heightPercent="80%" />
</android.support.percent.PercentRelativeLayout>

####PercentFrameLayout

<android.support.percent.PercentFrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
        <!-- ... XML CODE -->
</android.support.percent.PercentFrameLayout>

###Stylable :

  • heightPercent
  • widthPercent
  • marginBottomPercent
  • marginEndPercent
  • marginLeftPercent
  • marginPercent
  • marginRightPercent
  • marginStartPercent
  • marginTopPercent

Pre-requisites

  • Android SDK v22
  • Android Build Tools v22.0.1
  • Android Percent Support Repository v22.2.0
  • Android Support v4 Repository v22.2.0

according to the the manifest minsdk is v7 (android 2.1)

####License Mit

android-percent-support-extend's People

Contributors

hongyangandroid avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

android-percent-support-extend's Issues

项目介绍的版本不一致

在项目介绍的时候,你写的是1.1.1,在一 扩展的功能上面

compile 'com.zhy:percent-support-extends:1.1.1'
一 扩展的功能

然而,在三 用法里你这样写的
Android Studio
对于如何导入,也是相当的简单,android studio的用户,直接:

dependencies {
    //...
    compile 'com.zhy:percent-support-extends:1.0.7'
}

最好是同步一下版本号。

RadioButton

RadioButton这个有百分比嘛?,能添加吗

Caused by: java.util.IllegalFormatConversionException: %f can't format com.zhy.android.percent.support.PercentLayoutHelper$PercentLayoutInfo$PercentVal arguments

做机型适配的时候碰到这样一个错误,设备是vivo X6D。使用方式如下:
<com.zhy.android.percent.support.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:background="#ffffff"
    android:orientation="vertical"
    app:layout_widthPercent="77%"/>

</com.zhy.android.percent.support.PercentRelativeLayout>
错误如下:
08-06 19:40:34.723 E/chatSDK:c.a(Line:114)(22891): Caused by: java.util.IllegalFormatConversionException: %f can't format com.zhy.android.percent.support.PercentLayoutHelper$PercentLayoutInfo$PercentVal arguments
08-06 19:40:34.723 E/chatSDK:c.a(Line:114)(22891): at java.util.Formatter.badArgumentType(Formatter.java:1489)
08-06 19:40:34.723 E/chatSDK:c.a(Line:114)(22891): at java.util.Formatter.transformFromFloat(Formatter.java:2038)
08-06 19:40:34.723 E/chatSDK:c.a(Line:114)(22891): at java.util.Formatter.transform(Formatter.java:1465)
08-06 19:40:34.723 E/chatSDK:c.a(Line:114)(22891): at java.util.Formatter.doFormat(Formatter.java:1081)
08-06 19:40:34.723 E/chatSDK:c.a(Line:114)(22891): at java.util.Formatter.format(Formatter.java:1042)
08-06 19:40:34.723 E/chatSDK:c.a(Line:114)(22891): at java.util.Formatter.format(Formatter.java:1011)
08-06 19:40:34.723 E/chatSDK:c.a(Line:114)(22891): at java.lang.String.format(String.java:1554)
08-06 19:40:34.723 E/chatSDK:c.a(Line:114)(22891): at java.lang.String.format(String.java:1528)
08-06 19:40:34.723 E/chatSDK:c.a(Line:114)(22891): at com.zhy.android.percent.support.PercentLayoutHelper$PercentLayoutInfo.toString(PercentLayoutHelper.java:598)
08-06 19:40:34.723 E/chatSDK:c.a(Line:114)(22891): at java.lang.StringBuilder.append(StringBuilder.java:202)
08-06 19:40:34.723 E/chatSDK:c.a(Line:114)(22891): at com.zhy.android.percent.support.PercentLayoutHelper.getPercentLayoutInfo(PercentLayoutHelper.java:309)
08-06 19:40:34.723 E/chatSDK:c.a(Line:114)(22891): at com.zhy.android.percent.support.PercentRelativeLayout$LayoutParams.(PercentRelativeLayout.java:106)
08-06 19:40:34.723 E/chatSDK:c.a(Line:114)(22891): at com.zhy.android.percent.support.PercentRelativeLayout.generateLayoutParams(PercentRelativeLayout.java:82)
08-06 19:40:34.723 E/chatSDK:c.a(Line:114)(22891): at com.zhy.android.percen

屏幕方向改变导致使用sw,sh的布局时出错

当切换activity时,如果屏幕方向改变,会导致下一个activity当中以sw,sh为属性的布局出问题
应该是 com.zhy.android.percent.support.PercentLayoutHelper#mWidthScreen 这个属性设为static的原因

怎么关闭日志额?

控制台总是输出一堆尺寸的日志,如
02-29 15:21:59.438 5641-5641/? D/PercentLayout: widthHint = 456 , heightHint = 81
02-29 15:21:59.438 5641-5641/? D/PercentLayout: widthHint = 456 , heightHint = 81
02-29 15:21:59.438 5641-5641/? D/PercentLayout: widthHint = 456 , heightHint = 81
02-29 15:21:59.438 5641-5641/? D/PercentLayout: widthHint = 456 , heightHint = 81
02-29 15:21:59.438 5641-5641/? D/PercentLayout: widthHint = 152 , heightHint = 81
02-29 15:21:59.438 5641-5641/? D/PercentLayout: widthHint = 152 , heightHint = 81

超级长,能关闭么

Scroll view of edit texts

How to scroll percentLayout when soft input keyboard is open and keep its height percent please ?

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/zhy/android/percent/support/R$styleable;

Process: com.nuctech.tr.trapp, PID: 26973
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/zhy/android/percent/support/R$styleable;
at com.zhy.android.percent.support.PercentLayoutHelper.getPercentLayoutInfo(PercentLayoutHelper.java:290)
at com.zhy.android.percent.support.PercentLinearLayout$LayoutParams.(PercentLinearLayout.java:99)
at com.zhy.android.percent.support.PercentLinearLayout.generateLayoutParams(PercentLinearLayout.java:87)
at com.zhy.android.percent.support.PercentLinearLayout.generateLayoutParams(PercentLinearLayout.java:17)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:814)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:815)
at android.view.LayoutInflater.inflate(LayoutInflater.java:510)
at android.view.LayoutInflater.inflate(LayoutInflater.java:420)
at android.view.LayoutInflater.inflate(LayoutInflater.java:371)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:436)
at android.app.Activity.setContentView(Activity.java:2196)
at com.nuctech.tr.trapp.activity.LoginActivity.onCreate(LoginActivity.java:13)
求解决!

能否支持layout_maxWidthPercent和layout_maxHeightPercent

能否对具有layout_maxWidth和layout_maxHeight属性的控件支持layout_maxWidthPercent和layout_maxHeightPercent,感觉这两个属性在项目中也会用到。

应用场景

自定义Titlebar时,使用PercentReativeLayout作为父视图,对左中右三个按钮的宽度都设置成wrap_content,
然后使用layout_maxWidthPercent约束三个按钮最大宽度,使他们不会出现重叠的情况。

你好不知道这个错误的原因

java.lang.NoClassDefFoundError: com/zhy/android/percent/support/R$styleable
at com.zhy.android.percent.support.PercentLayoutHelper.getPercentLayoutInfo(PercentLayoutHelper.java:290)
at com.zhy.android.percent.support.PercentRelativeLayout$LayoutParams.(PercentRelativeLayout.java:106)
at com.zhy.android.percent.support.PercentRelativeLayout.generateLayoutParams(PercentRelativeLayout.java:82)
at com.zhy.android.percent.support.PercentRelativeLayout.generateLayoutParams(PercentRelativeLayout.java:65)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:865)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:837)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:866)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:837)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:326)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:391)
at com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:195)
at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:540)
at com.android.tools.idea.rendering.RenderTask.lambda$inflate$5(RenderTask.java:666)
at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1590)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

空指针异常,机型华为荣耀7i

FATAL EXCEPTION: main
Process: com.xxx, PID: 16022
java.lang.NullPointerException: Attempt to read from field 'float com.zhy.android.percent.support.PercentLayoutHelper$PercentLayoutInfo$PercentVal.percent' on a null object reference
at com.zhy.android.percent.support.PercentLayoutHelper.shouldHandleMeasuredHeightTooSmall(PercentLayoutHelper.java:667)
at com.zhy.android.percent.support.PercentLayoutHelper.handleMeasuredStateTooSmall(PercentLayoutHelper.java:642)
at com.zhy.android.percent.support.PercentRelativeLayout.onMeasure(PercentRelativeLayout.java:89)
at
android.view.View.layout(View.java:15732)
at
android.view.ViewGroup.layout(ViewGroup.java:5051)
at
android.widget.RelativeLayout.onLayout(RelativeLayout.java:1077)
at com.zhy.android.percent.support.PercentRelativeLayout.onLayout(PercentRelativeLayout.java:96)
at
android.view.View.layout(View.java:15745)
at
android.view.ViewGroup.layout(ViewGroup.java:5051)
at
android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
at
android.widget.FrameLayout.onLayout(FrameLayout.java:514)
at
android.view.View.layout(View.java:15745)
at
android.view.ViewGroup.layout(ViewGroup.java:5051)
at
android.widget.LinearLayout.setChildFrame(LinearLayout.java:1734)
at
android.widget.LinearLayout.layoutVertical(LinearLayout.java:1588)
at
android.widget.LinearLayout.onLayout(LinearLayout.java:1497)
at
android.view.View.layout(View.java:15745)
at
android.view.ViewGroup.layout(ViewGroup.java:5051)
at
android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
at
android.widget.FrameLayout.onLayout(FrameLayout.java:514)
at
android.view.View.layout(View.java:15745)
at
android.view.ViewGroup.layout(ViewGroup.java:5051)
at
android.widget.LinearLayout.setChildFrame(LinearLayout.java:1734)
at
android.widget.LinearLayout.layoutVertical(LinearLayout.java:1588)
at
android.widget.LinearLayout.onLayout(LinearLayout.java:1497)
at
android.view.View.layout(View.java:15745)
at
android.view.ViewGroup.layout(ViewGroup.java:5051)
at
android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
at
android.widget.FrameLayout.onLayout(FrameLayout.java:514)
at
android.view.View.layout(View.java:15745)
at
android.view.ViewGroup.layout(ViewGroup.java:5051)
at
android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2153)
at
android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1907)
at
android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1105)
at
android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6204)
at
android.view.Choreographer$CallbackRecord.run(Choreographer.java:799)
at
android.view.Choreographer.doCallbacks(Choreographer.java:612)
at
android.view.Choreographer.doFrame(Choreographer.java:581)
at
android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:785)
at
android.os.Handler.handleCallback(Handler.java:739)
at
android.os.Handler.dispatchMessage(Handler.java:95)
at
android.os.Looper.loop(Looper.java:135)
at
android.app.ActivityThread.main(ActivityThread.java:5593)

你这个不支持控件宽度和高度的百分比啊

举个例子,就是我的宽度设置了是屏幕的20%w,我想把控件的高度设置成此控件宽度的1.5倍,例如app:layout_heightPercentW="1.5" 而不是app:layout_heightPercent="30%w",希望作者加一个这样的功能!

bug:viewgroup里面的控件会有阴影

我在百分比布局的viewgroup放个button,该button和其他button不同的是,有阴影,尤其是按下的时候。这种情况通常出现在button是容器底部的时候。

当设置有Ellipsis后会报如下错误

Process: com.sophpark.upark, PID: 23962
java.lang.ArrayIndexOutOfBoundsException: length=25; index=-1
at android.text.StaticLayout.calculateEllipsis(StaticLayout.java:666)
at android.text.StaticLayout.out(StaticLayout.java:630)
at android.text.StaticLayout.generate(StaticLayout.java:423)
at android.text.StaticLayout.(StaticLayout.java:140)
at android.widget.TextView.makeSingleLayout(TextView.java:6601)
at android.widget.TextView.makeNewLayout(TextView.java:6446)
at android.widget.TextView.onMeasure(TextView.java:6804)
at android.view.View.measure(View.java:17536)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5478)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1083)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:615)
at com.zhy.android.percent.support.PercentLinearLayout.onMeasure(PercentLinearLayout.java:62)
at android.view.View.measure(View.java:17536)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5478)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17536)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5478)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17536)
at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1267)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.widget.ScrollView.onMeasure(ScrollView.java:337)
at android.view.View.measure(View.java:17536)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463)
at android.view.View.measure(View.java:17536)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5478)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
at android.view.View.measure(View.java:17536)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5478)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17536)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5478)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17536)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5478)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17536)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5478)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2632)
at android.view.View.measure(View.java:17536)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2125)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1238)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1455)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1126)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6041)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:792)
at android.view.Choreographer.doCallbacks(Choreographer.java:596)
at andro

功能建议

既然LinearLyaout进行了扩展,那么RelativeLayout和FrameLayout也进行一下扩展吧,这样才好配套使用

android:allowBackup in library causes conflict with app's Manifest

Error:Execution failed for task ':app:processDebugManifest'.

Manifest merger failed : Attribute application@allowBackup value=(false) from AndroidManifest.xml:22:9-36
is also present at [com.zhy:percent-support-extends:1.1.1] AndroidManifest.xml:12:9-35 value=(true).
Suggestion: add 'tools:replace="android:allowBackup"' to element at AndroidManifest.xml:20:5-142:19 to override.

在 PopupWindow 中 用了你的框架, 布局里面如果有listView 就崩溃了

java.lang.ClassCastException:
android.view.ViewGroup$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
at android.widget.ListView.setupChild(ListView.java:1834)
at android.widget.ListView.makeAndAddView(ListView.java:1797)
at android.widget.ListView.fillDown(ListView.java:695)
at android.widget.ListView.fillFromTop(ListView.java:756)
at android.widget.ListView.layoutChildren(ListView.java:1634)
at android.widget.AbsListView.onLayout(AbsListView.java:2129)
at android.view.View.layout(View.java:14876)
at android.view.ViewGroup.layout(ViewGroup.java:4651)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1697)
at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1686)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1462)
at android.view.View.layout(View.java:14876)
at android.view.ViewGroup.layout(ViewGroup.java:4651)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14876)
at android.view.ViewGroup.layout(ViewGroup.java:4651)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2068)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1822)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1053)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5959)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:780)
at android.view.Choreographer.doCallbacks(Choreographer.java:593)
at android.view.Choreographer.doFrame(Choreographer.java:562)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:766)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:680)
at dalvik.system.NativeStart.main(Native Method)

报错啦!!!

报如下的错误:
Caused by: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
org.gradle.internal.resolve.ModuleVersionNotFoundException: Could not find com.zhy:percent-support-extends:1.1.1.

包入库报错

导入库包如下错:
Error:(2, 0) Plugin with id 'com.github.dcendents.android-maven' not found.

hy大神,这是为何呢?呵呵

android 7.0适配

最近测试机更新了7.0 之前合适的布局除了问题。请问是不兼容7.0嘛?

在list的item布局里高度百分比不显示

在list的item布局里使用app:layout_heightPercent="10%h"的话,控件就不会有高度了,显示不出来。必须要用app:layout_heightPercent="10%sh"才行。
其他地方可以,可是使用sh sw在布局文件预览里看不到效果

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.