Skip to content

Commit dcd87d0

Browse files
committed
v1.1.4
1 parent 5dbe410 commit dcd87d0

File tree

7 files changed

+207
-81
lines changed

7 files changed

+207
-81
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,8 @@ SDTitleLayout 常规的能够满足开发需求的标题栏的封装,并
131131

132132

133133
## [版本更新说明]
134-
* v1.1.4(未发布)
134+
* v1.1.4
135+
* 增加屏幕适配方案,几行代码轻松实现屏幕适配
135136
* SDLineEditText:增加下划线高度、下划线paddingTop
136137
* SDTitleLayout:修复设置左右图片Padding造成的问题
137138
* SDBottomItemDialog:支持Item颜色、字体大小设置;支持底部取消按钮隐藏;支持Item超过7条时滚动显示或者全部显示

androidutil/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ android {
66
defaultConfig {
77
minSdkVersion rootProject.ext.midSdkVersion
88
targetSdkVersion rootProject.ext.targetSdkVersion
9-
versionCode 113
10-
versionName "1.1.3"
9+
versionCode 114
10+
versionName "1.1.4"
1111

1212
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
1313

androidutil/src/main/java/com/siberiadante/androidutil/util/SDScreenUtil.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.content.Context;
66
import android.content.pm.ActivityInfo;
77
import android.content.res.Configuration;
8+
import android.content.res.Resources;
89
import android.graphics.Bitmap;
910
import android.graphics.Color;
1011
import android.os.Build;
@@ -327,5 +328,51 @@ public static void setSleepDuration(int duration) {
327328
Settings.System.putInt(SDAndroidLib.getContext().getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, duration);
328329
}
329330

331+
public static void adaptScreenPortrait(final Activity activity,
332+
final int designWidthInPx) {
333+
adaptScreen(activity, designWidthInPx, true);
334+
}
335+
336+
private static void adaptScreen(final Activity activity,
337+
final int sizeInPx,
338+
final boolean isVerticalSlide) {
339+
final DisplayMetrics systemDm = Resources.getSystem().getDisplayMetrics();
340+
final DisplayMetrics appDm = SDAndroidLib.getContext().getResources().getDisplayMetrics();
341+
final DisplayMetrics activityDm = activity.getResources().getDisplayMetrics();
342+
if (isVerticalSlide) {
343+
activityDm.density = activityDm.widthPixels / (float) sizeInPx;
344+
} else {
345+
activityDm.density = activityDm.heightPixels / (float) sizeInPx;
346+
}
347+
activityDm.scaledDensity = activityDm.density * (systemDm.scaledDensity / systemDm.density);
348+
activityDm.densityDpi = (int) (160 * activityDm.density);
349+
350+
appDm.density = activityDm.density;
351+
appDm.scaledDensity = activityDm.scaledDensity;
352+
appDm.densityDpi = activityDm.densityDpi;
353+
}
330354

355+
public static void adaptScreenLandscape(final Activity activity,
356+
final int designHeightInPx) {
357+
adaptScreen(activity, designHeightInPx, false);
358+
}
359+
360+
public static void cancelAdaptScreen(final Activity activity) {
361+
final DisplayMetrics systemDm = Resources.getSystem().getDisplayMetrics();
362+
final DisplayMetrics appDm = SDAndroidLib.getContext().getResources().getDisplayMetrics();
363+
final DisplayMetrics activityDm = activity.getResources().getDisplayMetrics();
364+
activityDm.density = systemDm.density;
365+
activityDm.scaledDensity = systemDm.scaledDensity;
366+
activityDm.densityDpi = systemDm.densityDpi;
367+
368+
appDm.density = systemDm.density;
369+
appDm.scaledDensity = systemDm.scaledDensity;
370+
appDm.densityDpi = systemDm.densityDpi;
371+
}
372+
373+
public static boolean isAdaptScreen() {
374+
final DisplayMetrics systemDm = Resources.getSystem().getDisplayMetrics();
375+
final DisplayMetrics appDm = SDAndroidLib.getContext().getResources().getDisplayMetrics();
376+
return systemDm.density != appDm.density;
377+
}
331378
}

utilsample/src/main/java/com/siberiadante/utilsample/activity/HomeMainActivity.java

Lines changed: 50 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616
import android.view.View;
1717
import android.widget.RadioGroup;
1818

19+
import com.siberiadante.androidutil.util.SDScreenUtil;
1920
import com.siberiadante.androidutil.widget.radiobutton.SDNotifyRadioButton;
2021
import com.siberiadante.androidutil.widget.radiobutton.SDDrawableRadioButton;
2122
import com.siberiadante.utilsample.R;
23+
import com.siberiadante.utilsample.activity.base.BaseActivity;
2224
import com.siberiadante.utilsample.adapter.MainActivityAdapter;
2325
import com.siberiadante.utilsample.fragment.SDUtilFragment;
2426
import com.siberiadante.utilsample.fragment.SDWidgetFragment;
@@ -31,8 +33,8 @@
3133
import butterknife.BindView;
3234
import butterknife.ButterKnife;
3335

34-
public class HomeMainActivity extends AppCompatActivity
35-
implements NavigationView.OnNavigationItemSelectedListener , ViewPager.OnPageChangeListener, RadioGroup.OnCheckedChangeListener {
36+
public class HomeMainActivity extends BaseActivity
37+
implements NavigationView.OnNavigationItemSelectedListener, ViewPager.OnPageChangeListener, RadioGroup.OnCheckedChangeListener {
3638

3739
@BindView(R.id.toolbar)
3840
Toolbar toolbar;
@@ -54,19 +56,34 @@ public class HomeMainActivity extends AppCompatActivity
5456
NavigationView navigationView;
5557
@BindView(R.id.drawer_layout)
5658
DrawerLayout drawerLayout;
59+
// @Override
60+
// protected void onCreate(Bundle savedInstanceState) {
61+
// super.onCreate(savedInstanceState);
62+
// setContentView(R.layout.activity_home_main);
63+
// ButterKnife.bind(this);
64+
// initView();
65+
// initData();
66+
// }
67+
5768

5869
@Override
59-
protected void onCreate(Bundle savedInstanceState) {
60-
super.onCreate(savedInstanceState);
61-
setContentView(R.layout.activity_home_main);
62-
ButterKnife.bind(this);
63-
initView();
64-
initData();
70+
public void beforeSetContentView() {
71+
super.beforeSetContentView();
72+
if (SDScreenUtil.isPortrait()) {
73+
SDScreenUtil.adaptScreenPortrait(this, 360);
74+
} else {
75+
SDScreenUtil.adaptScreenLandscape(this, 360);
76+
}
6577
}
6678

79+
@Override
80+
public int setLayoutId() {
81+
return R.layout.activity_home_main;
82+
}
6783

84+
@Override
85+
public void initView(Bundle savedInstanceState) {
6886

69-
private void initView() {
7087
setSupportActionBar(toolbar);
7188
fab.setOnClickListener(new View.OnClickListener() {
7289
@Override
@@ -84,7 +101,24 @@ public void onClick(View view) {
84101
navigationView.setNavigationItemSelectedListener(this);
85102
}
86103

87-
private void initData() {
104+
// private void initData() {
105+
// List<Fragment> fragments = new ArrayList<>();
106+
// fragments.add(SDUtilFragment.getInstance());
107+
// fragments.add(SDViewFragment.getInstance());
108+
// fragments.add(SDWidgetFragment.getInstance());
109+
// fragments.add(PracticeFragment.getInstance());
110+
// viewPager.setAdapter(new MainActivityAdapter(getSupportFragmentManager(), fragments));
111+
// viewPager.setCurrentItem(0);
112+
// viewPager.setOffscreenPageLimit(4);
113+
// viewPager.addOnPageChangeListener(this);
114+
// rgMain.setOnCheckedChangeListener(this);
115+
// rbOne.setChecked(true);
116+
// }
117+
118+
119+
@Override
120+
public void initData() {
121+
super.initData();
88122
List<Fragment> fragments = new ArrayList<>();
89123
fragments.add(SDUtilFragment.getInstance());
90124
fragments.add(SDViewFragment.getInstance());
@@ -98,6 +132,12 @@ private void initData() {
98132
rbOne.setChecked(true);
99133
}
100134

135+
@Override
136+
protected void onDestroy() {
137+
super.onDestroy();
138+
SDScreenUtil.cancelAdaptScreen(this);
139+
}
140+
101141
@Override
102142
public void onBackPressed() {
103143
if (drawerLayout.isDrawerOpen(GravityCompat.START)) {

utilsample/src/main/java/com/siberiadante/utilsample/activity/base/BaseActivity.java

Lines changed: 71 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,15 @@
2222

2323
import com.jude.swipbackhelper.SwipeBackHelper;
2424
import com.siberiadante.androidutil.util.SDKeyBoardUtil;
25+
import com.siberiadante.androidutil.util.SDScreenUtil;
2526
import com.siberiadante.utilsample.listener.RequestPermissionCallBack;
2627

2728
import butterknife.ButterKnife;
2829

2930
public abstract class BaseActivity extends AppCompatActivity {
31+
private final int mRequestCode = 1024;
3032
public ActionBar actionBar;
3133
private RequestPermissionCallBack mRequestPermissionCallBack;
32-
private final int mRequestCode = 1024;
3334

3435
@Override
3536
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -61,7 +62,11 @@ public void beforeSetContentView() {
6162
.setSwipeEdge(200)
6263
.setSwipeRelateEnable(true)
6364
.setSwipeRelateOffset(300);
64-
65+
// if (SDScreenUtil.isPortrait()) {
66+
// SDScreenUtil.adaptScreenPortrait(this, 360);
67+
// } else {
68+
// SDScreenUtil.adaptScreenLandscape(this, 360);
69+
// }
6570
}
6671

6772
public abstract int setLayoutId();
@@ -82,25 +87,66 @@ public void onPostCreate(@Nullable Bundle savedInstanceState) {
8287
protected void onDestroy() {
8388
super.onDestroy();
8489
SwipeBackHelper.onDestroy(this);
90+
// SDScreenUtil.cancelAdaptScreen(this);
8591
}
8692

8793
//软键盘的处理——Start
8894

95+
@Override
96+
public boolean dispatchTouchEvent(MotionEvent ev) {
97+
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
98+
if (isTouchView(filterViewByIds(), ev)) return super.dispatchTouchEvent(ev);
99+
if (hideSoftByEditViewIds() == null || hideSoftByEditViewIds().length == 0)
100+
return super.dispatchTouchEvent(ev);
101+
View v = getCurrentFocus();
102+
if (isFocusEditText(v, hideSoftByEditViewIds())) {
103+
if (isTouchView(hideSoftByEditViewIds(), ev))
104+
return super.dispatchTouchEvent(ev);
105+
//隐藏键盘
106+
SDKeyBoardUtil.hideInputForce(this);
107+
clearViewFocus(v, hideSoftByEditViewIds());
108+
109+
}
110+
}
111+
return super.dispatchTouchEvent(ev);
112+
}
113+
89114
/**
90-
* 清除editText的焦点
91-
*
92-
* @param v 焦点所在View
93-
* @param ids 输入框
115+
* 是否触摸在指定view上面,对某个控件过滤
94116
*/
95-
public void clearViewFocus(View v, int... ids) {
96-
if (null != v && null != ids && ids.length > 0) {
97-
for (int id : ids) {
98-
if (v.getId() == id) {
99-
v.clearFocus();
100-
break;
101-
}
117+
public boolean isTouchView(View[] views, MotionEvent ev) {
118+
if (views == null || views.length == 0) return false;
119+
int[] location = new int[2];
120+
for (View view : views) {
121+
view.getLocationOnScreen(location);
122+
int x = location[0];
123+
int y = location[1];
124+
if (ev.getX() > x && ev.getX() < (x + view.getWidth())
125+
&& ev.getY() > y && ev.getY() < (y + view.getHeight())) {
126+
return true;
102127
}
103128
}
129+
return false;
130+
}
131+
132+
/**
133+
* 传入要过滤的View
134+
* 过滤之后点击将不会有隐藏软键盘的操作
135+
*
136+
* @return id 数组
137+
*/
138+
public View[] filterViewByIds() {
139+
return null;
140+
}
141+
142+
/**
143+
* 传入EditText的Id
144+
* 没有传入的EditText不做处理
145+
*
146+
* @return id 数组
147+
*/
148+
public int[] hideSoftByEditViewIds() {
149+
return null;
104150
}
105151

106152
/**
@@ -122,24 +168,6 @@ public boolean isFocusEditText(View v, int... ids) {
122168
return false;
123169
}
124170

125-
/**
126-
* 是否触摸在指定view上面,对某个控件过滤
127-
*/
128-
public boolean isTouchView(View[] views, MotionEvent ev) {
129-
if (views == null || views.length == 0) return false;
130-
int[] location = new int[2];
131-
for (View view : views) {
132-
view.getLocationOnScreen(location);
133-
int x = location[0];
134-
int y = location[1];
135-
if (ev.getX() > x && ev.getX() < (x + view.getWidth())
136-
&& ev.getY() > y && ev.getY() < (y + view.getHeight())) {
137-
return true;
138-
}
139-
}
140-
return false;
141-
}
142-
143171
/**
144172
* 是否触摸在指定view上面,对某个控件过滤
145173
*/
@@ -159,48 +187,25 @@ public boolean isTouchView(int[] ids, MotionEvent ev) {
159187
return false;
160188
}
161189

162-
@Override
163-
public boolean dispatchTouchEvent(MotionEvent ev) {
164-
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
165-
if (isTouchView(filterViewByIds(), ev)) return super.dispatchTouchEvent(ev);
166-
if (hideSoftByEditViewIds() == null || hideSoftByEditViewIds().length == 0)
167-
return super.dispatchTouchEvent(ev);
168-
View v = getCurrentFocus();
169-
if (isFocusEditText(v, hideSoftByEditViewIds())) {
170-
if (isTouchView(hideSoftByEditViewIds(), ev))
171-
return super.dispatchTouchEvent(ev);
172-
//隐藏键盘
173-
SDKeyBoardUtil.hideInputForce(this);
174-
clearViewFocus(v, hideSoftByEditViewIds());
175-
176-
}
177-
}
178-
return super.dispatchTouchEvent(ev);
179-
}
180-
181-
/**
182-
* 传入EditText的Id
183-
* 没有传入的EditText不做处理
184-
*
185-
* @return id 数组
186-
*/
187-
public int[] hideSoftByEditViewIds() {
188-
return null;
189-
}
190-
191190
/**
192-
* 传入要过滤的View
193-
* 过滤之后点击将不会有隐藏软键盘的操作
191+
* 清除editText的焦点
194192
*
195-
* @return id 数组
193+
* @param v 焦点所在View
194+
* @param ids 输入框
196195
*/
197-
public View[] filterViewByIds() {
198-
return null;
196+
public void clearViewFocus(View v, int... ids) {
197+
if (null != v && null != ids && ids.length > 0) {
198+
for (int id : ids) {
199+
if (v.getId() == id) {
200+
v.clearFocus();
201+
break;
202+
}
203+
}
204+
}
199205
}
200206

201207
//软键盘的处理——End
202208

203-
204209
/**
205210
* 权限请求结果回调
206211
*

0 commit comments

Comments
 (0)