Skip to content

增加不用继承 AutoLayoutActivity 的方式适配 #91

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -98,6 +98,15 @@ dependencies {
* RelativeLayout -> AutoRelativeLayout
* FrameLayout -> AutoFrameLayout

或者在 Activity 中重写 onCreateView
```java
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
View view = AutoLayoutHelper.onCreateAutoLayoutView(name, context, attrs);
return view != null ? view : super.onCreateView(name, context, attrs);
}
```

这样也可以完成适配。

## 目前支持属性
17 changes: 10 additions & 7 deletions autolayout-widget/build.gradle
Original file line number Diff line number Diff line change
@@ -1,21 +1,24 @@
apply plugin: 'com.android.library'

android {
compileSdkVersion 23
buildToolsVersion "23.0.1"

compileSdkVersion rootProject.ext.android.compileSdkVersion
buildToolsVersion rootProject.ext.android.buildToolsVersion
defaultConfig {
minSdkVersion 10
targetSdkVersion 23
versionCode 1
versionName "1.0"
minSdkVersion rootProject.ext.android.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}

}

dependencies {
105 changes: 22 additions & 83 deletions autolayout/build.gradle
Original file line number Diff line number Diff line change
@@ -1,100 +1,39 @@
apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

version = "1.4.5"
apply plugin: 'maven'
apply plugin: 'com.novoda.bintray-release'

android {
compileSdkVersion 23
buildToolsVersion "23.0.1"

compileSdkVersion rootProject.ext.android.compileSdkVersion
buildToolsVersion rootProject.ext.android.buildToolsVersion
defaultConfig {
minSdkVersion 7
targetSdkVersion 23
versionCode 1
versionName "1.0"
minSdkVersion rootProject.ext.android.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

def siteUrl = 'https://github.com/hongyangAndroid/AndroidAutoLayout' // #CONFIG# // project homepage
def gitUrl = 'https://github.com/hongyangAndroid/AndroidAutoLayout.git' // #CONFIG# // project git
group = "com.zhy"

install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
name 'AutoLayout' // #CONFIG# // project title
url siteUrl
// Set your license
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id 'hongyangAndroid' // #CONFIG# // your user id (you can write your nickname)
name 'ZhangHongyang' // #CONFIG# // your user name
email '623565791@qq.com' // #CONFIG# // your email
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
productFlavors {
}
}

task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}

task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}

artifacts {
archives javadocJar
archives sourcesJar
}
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
configurations = ['archives']
pkg {
repo = "maven"
name = "autolayout" // #CONFIG# project name in jcenter
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
lintOptions {
abortOnError false
checkReleaseBuilds false
}
}


dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.1'
provided rootProject.ext.dependencies.appcompatV7
}

publish {
userOrg = 'mylhyl'
groupId = 'com.mylhyl'
artifactId = 'autolayout'
version = rootProject.ext.publish.version
description = 'AndroidAutoLayout'
website = "https://github.com/mylhyl/AndroidAutoLayout"
}
Original file line number Diff line number Diff line change
@@ -5,43 +5,16 @@
import android.util.AttributeSet;
import android.view.View;

;
;import com.zhy.autolayout.utils.AutoLayoutHelper;

/**
* Created by zhy on 15/11/19.
*/
public class AutoLayoutActivity extends AppCompatActivity
{
private static final String LAYOUT_LINEARLAYOUT = "LinearLayout";
private static final String LAYOUT_FRAMELAYOUT = "FrameLayout";
private static final String LAYOUT_RELATIVELAYOUT = "RelativeLayout";

public class AutoLayoutActivity extends AppCompatActivity {

@Override
public View onCreateView(String name, Context context, AttributeSet attrs)
{
View view = null;
if (name.equals(LAYOUT_FRAMELAYOUT))
{
view = new AutoFrameLayout(context, attrs);
}

if (name.equals(LAYOUT_LINEARLAYOUT))
{
view = new AutoLinearLayout(context, attrs);
}

if (name.equals(LAYOUT_RELATIVELAYOUT))
{
view = new AutoRelativeLayout(context, attrs);
}

if (view != null) return view;

return super.onCreateView(name, context, attrs);
public View onCreateView(String name, Context context, AttributeSet attrs) {
View view = AutoLayoutHelper.onCreateAutoLayoutView(name, context, attrs);
return view != null ? view : super.onCreateView(name, context, attrs);
}




}
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@

/**
* Created by zhy on 15/12/5.
* <p/>
* <p>
* 与attrs.xml中数值对应
*/
public interface Attrs
Original file line number Diff line number Diff line change
@@ -22,7 +22,10 @@
import android.view.View;
import android.view.ViewGroup;

import com.zhy.autolayout.AutoFrameLayout;
import com.zhy.autolayout.AutoLayoutInfo;
import com.zhy.autolayout.AutoLinearLayout;
import com.zhy.autolayout.AutoRelativeLayout;
import com.zhy.autolayout.R;
import com.zhy.autolayout.attr.HeightAttr;
import com.zhy.autolayout.attr.MarginAttr;
@@ -88,6 +91,9 @@ public class AutoLayoutHelper
private static final int INDEX_MIN_WIDTH = 15;
private static final int INDEX_MIN_HEIGHT = 16;

private static final String LAYOUT_LINEARLAYOUT = "LinearLayout";
private static final String LAYOUT_FRAMELAYOUT = "FrameLayout";
private static final String LAYOUT_RELATIVELAYOUT = "RelativeLayout";

/**
* move to other place?
@@ -230,4 +236,21 @@ public interface AutoLayoutParams
{
AutoLayoutInfo getAutoLayoutInfo();
}

public static View onCreateAutoLayoutView(String name, Context context, AttributeSet attrs) {
View view = null;
if (name.equals(LAYOUT_LINEARLAYOUT)) {
view = new AutoLinearLayout(context, attrs);
}

if (name.equals(LAYOUT_FRAMELAYOUT)) {
view = new AutoFrameLayout(context, attrs);
}

if (name.equals(LAYOUT_RELATIVELAYOUT)) {
view = new AutoRelativeLayout(context, attrs);
}

return view;
}
}
100 changes: 44 additions & 56 deletions autolayout/src/main/java/com/zhy/autolayout/utils/AutoUtils.java
Original file line number Diff line number Diff line change
@@ -11,138 +11,126 @@
/**
* Created by zhy on 15/12/4.
*/
public class AutoUtils
{
public class AutoUtils {

/**
* 会直接将view的LayoutParams上设置的width,height直接进行百分比处理
*
* @param view
*/
public static void auto(View view)
{
public static void auto(View view) {
autoSize(view);
autoMax(view);
autoMin(view);
autoPadding(view);
autoMargin(view);
autoTextSize(view, AutoAttr.BASE_DEFAULT);
}

public static void autoSize(View view) {
auto(view, Attrs.WIDTH | Attrs.HEIGHT, AutoAttr.BASE_DEFAULT);
}

public static void autoMax(View view) {
auto(view, Attrs.MAX_WIDTH | Attrs.MAX_HEIGHT, AutoAttr.BASE_DEFAULT);
}

public static void autoMin(View view) {
auto(view, Attrs.MIN_WIDTH | Attrs.MIN_HEIGHT, AutoAttr.BASE_DEFAULT);
}

public static void autoPadding(View view) {
auto(view, Attrs.PADDING, AutoAttr.BASE_DEFAULT);
}

public static void autoMargin(View view) {
auto(view, Attrs.MARGIN, AutoAttr.BASE_DEFAULT);
}

public static void autoTextSize(View view, int base) {
auto(view, Attrs.TEXTSIZE, base);
}

/**
* @param view
* @param attrs #Attrs.WIDTH|Attrs.HEIGHT
* @param base AutoAttr.BASE_WIDTH|AutoAttr.BASE_HEIGHT|AutoAttr.BASE_DEFAULT
*/
public static void auto(View view, int attrs, int base)
{
public static void auto(View view, int attrs, int base) {
AutoLayoutInfo autoLayoutInfo = AutoLayoutInfo.getAttrFromView(view, attrs, base);
if (autoLayoutInfo != null)
autoLayoutInfo.fillAttrs(view);
}

public static void autoTextSize(View view)
{
public static void autoTextSize(View view) {
auto(view, Attrs.TEXTSIZE, AutoAttr.BASE_DEFAULT);
}

public static void autoTextSize(View view, int base)
{
auto(view, Attrs.TEXTSIZE, base);
}

public static void autoMargin(View view)
{
auto(view, Attrs.MARGIN, AutoAttr.BASE_DEFAULT);
}

public static void autoMargin(View view, int base)
{
public static void autoMargin(View view, int base) {
auto(view, Attrs.MARGIN, base);
}

public static void autoPadding(View view)
{
auto(view, Attrs.PADDING, AutoAttr.BASE_DEFAULT);
}

public static void autoPadding(View view, int base)
{
public static void autoPadding(View view, int base) {
auto(view, Attrs.PADDING, base);
}

public static void autoSize(View view)
{
auto(view, Attrs.WIDTH | Attrs.HEIGHT, AutoAttr.BASE_DEFAULT);
}

public static void autoSize(View view, int base)
{
public static void autoSize(View view, int base) {
auto(view, Attrs.WIDTH | Attrs.HEIGHT, base);
}

public static boolean autoed(View view)
{
public static boolean autoed(View view) {
Object tag = view.getTag(R.id.id_tag_autolayout_size);
if (tag != null) return true;
view.setTag(R.id.id_tag_autolayout_size, "Just Identify");
return false;
}

public static float getPercentWidth1px()
{
public static float getPercentWidth1px() {
int screenWidth = AutoLayoutConifg.getInstance().getScreenWidth();
int designWidth = AutoLayoutConifg.getInstance().getDesignWidth();
return 1.0f * screenWidth / designWidth;
}

public static float getPercentHeight1px()
{
public static float getPercentHeight1px() {
int screenHeight = AutoLayoutConifg.getInstance().getScreenHeight();
int designHeight = AutoLayoutConifg.getInstance().getDesignHeight();
return 1.0f * screenHeight / designHeight;
}


public static int getPercentWidthSize(int val)
{
public static int getPercentWidthSize(int val) {
int screenWidth = AutoLayoutConifg.getInstance().getScreenWidth();
int designWidth = AutoLayoutConifg.getInstance().getDesignWidth();
return (int) (val * 1.0f / designWidth * screenWidth);
}


public static int getPercentWidthSizeBigger(int val)
{
public static int getPercentWidthSizeBigger(int val) {
int screenWidth = AutoLayoutConifg.getInstance().getScreenWidth();
int designWidth = AutoLayoutConifg.getInstance().getDesignWidth();

int res = val * screenWidth;
if (res % designWidth == 0)
{
if (res % designWidth == 0) {
return res / designWidth;
} else
{
} else {
return res / designWidth + 1;
}

}

public static int getPercentHeightSizeBigger(int val)
{
public static int getPercentHeightSizeBigger(int val) {
int screenHeight = AutoLayoutConifg.getInstance().getScreenHeight();
int designHeight = AutoLayoutConifg.getInstance().getDesignHeight();

int res = val * screenHeight;
if (res % designHeight == 0)
{
if (res % designHeight == 0) {
return res / designHeight;
} else
{
} else {
return res / designHeight + 1;
}
}

public static int getPercentHeightSize(int val)
{
public static int getPercentHeightSize(int val) {
int screenHeight = AutoLayoutConifg.getInstance().getScreenHeight();
int designHeight = AutoLayoutConifg.getInstance().getDesignHeight();

Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@
import android.view.WindowManager;

/**
* Created by zhy on 15/12/4.<br/>
* Created by zhy on 15/12/4.<br>
* form http://stackoverflow.com/questions/1016896/get-screen-dimensions-in-pixels/15699681#15699681
*/
public class ScreenUtils
16 changes: 13 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,18 +1,28 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
apply from: "config.gradle"

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
classpath 'com.github.dcendents:android-maven-plugin:1.2'
classpath 'com.android.tools.build:gradle:2.3.1'
classpath 'com.novoda:bintray-release:0.3.4'
}
}

allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
}

tasks.withType(Javadoc) {
options {
encoding "UTF-8"
charSet 'UTF-8'
links "http://docs.oracle.com/javase/7/docs/api"
failOnError false
}
}
}
24 changes: 24 additions & 0 deletions config.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
ext {

android = [
compileSdkVersion: 23,
buildToolsVersion: "25.0.0",
minSdkVersion : 15,
targetSdkVersion : 23,
versionCode : 1,
versionName : "20180601"
]

dependVersion = [
support: "23.4.0"
]

dependencies = [
// support
appcompatV7 : "com.android.support:appcompat-v7:${dependVersion.support}",
recyclerview: "com.android.support:recyclerview-v7:${dependVersion.support}"
]
publish =[
version : "1.5.0"
]
}
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Thu Nov 19 16:52:41 GMT+08:00 2015
#Fri Jun 01 15:21:24 CST 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
16 changes: 10 additions & 6 deletions sample/build.gradle
Original file line number Diff line number Diff line change
@@ -1,22 +1,26 @@
apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
compileSdkVersion rootProject.ext.android.compileSdkVersion
buildToolsVersion rootProject.ext.android.buildToolsVersion

defaultConfig {
applicationId "com.zhy.sample"
minSdkVersion 10
targetSdkVersion 23
versionCode 1
versionName "1.0"
minSdkVersion rootProject.ext.android.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}

}

dependencies {
Original file line number Diff line number Diff line change
@@ -60,7 +60,7 @@ public MyAdapter(Context context, List<String> datas)
public com.zhy.base.adapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
com.zhy.base.adapter.ViewHolder viewHolder = super.onCreateViewHolder(parent, viewType);
AutoUtils.autoSize(viewHolder.getConvertView());
AutoUtils.auto(viewHolder.getConvertView());
return viewHolder;
}

16 changes: 16 additions & 0 deletions sample/src/main/res/layout/fragment_gridview.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?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">

<GridView
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/linear"
android:layout_gravity="center_horizontal"
android:horizontalSpacing="18px"
android:numColumns="3"
android:verticalSpacing="30px" />
</LinearLayout>
3 changes: 2 additions & 1 deletion sample/src/main/res/layout/recyclerview_item.xml
Original file line number Diff line number Diff line change
@@ -4,7 +4,8 @@
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="244px"
android:layout_height="wrap_content"
android:minHeight="244px"
android:orientation="vertical" >

<ImageView
16 changes: 10 additions & 6 deletions widgetsample/build.gradle
Original file line number Diff line number Diff line change
@@ -1,22 +1,26 @@
apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
compileSdkVersion rootProject.ext.android.compileSdkVersion
buildToolsVersion rootProject.ext.android.buildToolsVersion

defaultConfig {
applicationId "com.zhy.autolayout.test.widgets"
minSdkVersion 10
targetSdkVersion 23
versionCode 1
versionName "1.0"
minSdkVersion rootProject.ext.android.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}

}

dependencies {