Skip to content

Commit e167b80

Browse files
committed
修正 Android 9.0 限制 Http 明文请求的问题
修正一些代码规范,删除一些无用的资源文件 修正验证码倒计时出现的部分逻辑问题 修复首页软键盘弹出时将底部导航栏顶上去的问题 优化和统一正方形View和Layout的宽度大小算法
1 parent 8c7834b commit e167b80

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+437
-464
lines changed

AndroidBug.md

+24-1
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,27 @@
6363
<activity
6464
android:name=".ui.activity.HomeActivity"
6565
android:alwaysRetainTaskState="true"
66-
android:launchMode="singleTop" />
66+
android:launchMode="singleTop" />
67+
68+
#### 修复 Android P 限制 Http 明文请求的问题
69+
70+
> Android P 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。
71+
如果当前应用的请求是 htttp 请求,而非 https ,这样就会导系统禁止当前应用进行该请求,如果 WebView 的 url 用 http 协议,同样会出现加载失败,https 不受影响
72+
73+
> 在 res 下新建一个 xml 目录,然后创建一个名为:network_security_config.xml 文件 ,该文件内容如下
74+
75+
<?xml version="1.0" encoding="utf-8"?>
76+
<network-security-config>
77+
<base-config cleartextTrafficPermitted="true" />
78+
</network-security-config>
79+
80+
> 然后在 AndroidManifest.xml application 标签内应用上面的xml配置
81+
82+
<application
83+
android:name=".App"
84+
android:icon="@mipmap/ic_launcher"
85+
android:label="@string/app_name"
86+
android:networkSecurityConfig="@xml/network_security_config"
87+
android:roundIcon="@mipmap/ic_launcher_round"
88+
android:theme="@style/AppTheme" />
89+

AndroidProject.apk

31 KB
Binary file not shown.

ProjectDetails.md

+9-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@
2626

2727
* [CommonActivity](app/src/main/java/com/hjq/demo/common/CommonActivity.java):继承至UIActivity,主要实现项目中的业务逻辑代码
2828

29+
## 复制模板
30+
31+
> 考虑到 Studio 创建一个 Activity 还是比较费劲的,所以在项目中预留了可供复制的副本
32+
33+
* [CopyActivity.java](app/src/main/java/com/hjq/demo/ui/activity/CopyActivity.java) 对应 [activity_copy.xml](app/src/main/res/layout/activity_copy.xml)
34+
35+
* [CopyFragment.java](app/src/main/java/com/hjq/demo/ui/fragment/CopyFragment.java) 对应 [fragment_copy.xml](app/src/main/res/layout/fragment_copy.xml)
36+
2937
## View 样式
3038

3139
* 普通的圆角 Button 样式:style="@style/ButtonStyle"
@@ -46,7 +54,7 @@
4654

4755
## 框架使用
4856

49-
> 具体用法可以[点击此处查看示例](app/src/main/res/layout/fragment_test_c.xml)
57+
> 具体用法可以[点击此处查看示例](app/src/main/java/com/hjq/demo/ui/fragment/TestFragmentC.java)
5058
5159
![](picture/3.png)
5260

README.md

+13-9
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
# 模板工程
22

3+
> 博客地址:[但愿人长久,搬砖不再有](https://www.jianshu.com/p/77dd326f21dc)
4+
35
> 当我们日复一日年复一年的搬砖的时候,你是否曾想过提升一下开发效率,如果一个模板的项目摆在你的面前,你还会选择自己搭架构么
46
57
> 但是做出一个好的模板项目并非易事,有多少人愿意选择去做,还有多少人选择努力去做好,可能寥寥无几,但是你今天看到的,正是你所想要的,一个真正能解决你开发新项目时最大痛点的模板工程,你不需要再麻木 Copy 原有旧项目的代码,只需改动少量代码就能得到想要的效果,你会发现开发新项目其实是一件很快乐的事
68
7-
> 已经正式投入公司新项目开发多时,暂时没有其他毛病[点击此处下载Demo](https://raw.githubusercontent.com/getActivity/AndroidProject/master/AndroidProject.apk)
9+
> 已经正式投入公司新项目开发多时,暂时没有发现毛病[点击此处下载Demo](https://raw.githubusercontent.com/getActivity/AndroidProject/master/AndroidProject.apk),如果有问题随时欢迎你提交 [issues](https://github.com/getActivity/AndroidProject/issues/new) 给我反馈
810
911
![](picture/0.png)
1012

@@ -24,19 +26,19 @@
2426

2527
![](picture/8.png)
2628

27-
## 集成框架
28-
29-
* 状态栏沉浸:[https://github.com/gyf-dev/ImmersionBar](https://github.com/gyf-dev/ImmersionBar)
30-
31-
* 侧滑功能:[https://github.com/bingoogolapple/BGASwipeBackLayout-Android](https://github.com/bingoogolapple/BGASwipeBackLayout-Android)
29+
#### 集成框架
3230

3331
* 权限请求框架:[https://github.com/getActivity/XXPermissions](https://github.com/getActivity/XXPermissions)
3432

3533
* 标题栏:[https://github.com/getActivity/TitleBar](https://github.com/getActivity/TitleBar)
3634

3735
* 吐司工具类:[https://github.com/getActivity/ToastUtils](https://github.com/getActivity/ToastUtils)
3836

39-
* 圆形的ImageView:[https://github.com/hdodenhof/CircleImageView](https://github.com/hdodenhof/CircleImageView)
37+
* 状态栏沉浸:[https://github.com/gyf-dev/ImmersionBar](https://github.com/gyf-dev/ImmersionBar)
38+
39+
* 界面侧滑功能:[https://github.com/bingoogolapple/BGASwipeBackLayout-Android](https://github.com/bingoogolapple/BGASwipeBackLayout-Android)
40+
41+
* 圆形ImageView:[https://github.com/hdodenhof/CircleImageView](https://github.com/hdodenhof/CircleImageView)
4042

4143
* ButterKnife注解:[https://github.com/JakeWharton/butterknife](https://github.com/JakeWharton/butterknife)
4244

@@ -50,10 +52,10 @@
5052

5153
* 集成友盟统计:集成友盟统计,并且加入了友盟多渠道打包,在发布release包时可选择渠道包
5254

53-
* 常用自定义View:圆形ImageView,验证码点击倒计时View,带清除按钮的EditText,正方形的FrameLayout、LinearLayout、RelativeLayout、ImageView
54-
5555
* 界面样式规范:项目的严格按照 Material Design 设计进行配色,统一和规范Button和EditText控件样式
5656

57+
* 常用自定义View:圆形ImageView,验证码点击倒计时View,带清除按钮的EditText,正方形的FrameLayout、LinearLayout、RelativeLayout、ImageView
58+
5759
* 代码注释规范:代码严格按照谷歌级规范来做,如需寻找友盟相关的代码,全局搜索 "友盟" 即可,任何一处不关于原生的 API 都有非常完善的注释
5860

5961
#### 修复Android普遍存在的问题,[查看详细](AndroidBug.md)
@@ -68,6 +70,8 @@
6870

6971
* 修复 任务栈中 首页Activity 被重复启动的问题
7072

73+
* 修正 Android 9.0 限制 Http 明文请求的问题
74+
7175
#### Android技术讨论Q群:78797078
7276

7377
## License

app/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ android {
4343
baidu {} //百度
4444
xiaomi {} //小米
4545
huawei {} //华为
46-
qihu {} //360
46+
google {} //谷歌
4747

4848
productFlavors.all { flavor ->
4949
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]

app/src/main/AndroidManifest.xml

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
android:name=".common.CommonApplication"
2222
android:icon="@mipmap/ic_launcher"
2323
android:label="@string/app_name"
24+
android:networkSecurityConfig="@xml/network_security_config"
2425
android:roundIcon="@mipmap/ic_launcher"
2526
android:theme="@style/AppTheme">
2627

@@ -68,6 +69,7 @@
6869
<!-- 关于界面 -->
6970
<activity
7071
android:name=".ui.activity.AboutActivity"
72+
android:label="@string/about_text"
7173
android:launchMode="singleTop" />
7274

7375
<!-- 浏览器界面 -->

app/src/main/java/com/hjq/demo/common/UIActivity.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@ public void init(){
4141
if (getTitleBarId() > 0) {
4242
ImmersionBar.setTitleBar(this, findViewById(getTitleBarId()));
4343
}
44-
initView();
45-
initData();
44+
super.init();
4645
}
4746

4847
public BGASwipeBackHelper getSwipeBackHelper() {

app/src/main/java/com/hjq/demo/common/UILazyFragment.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
2828
}
2929

3030
//设置标题栏
31-
if (!isLazyLoad() && getTitleBarId() > 0) {
32-
ImmersionBar.setTitleBar(mActivity, view.findViewById(getTitleBarId()));
31+
if (getTitleBarId() > 0) {
32+
ImmersionBar.setTitleBar(mActivity, findViewById(getTitleBarId()));
3333
}
3434
}
3535

app/src/main/java/com/hjq/demo/ui/activity/HomeActivity.java

+32-6
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@
44
import android.support.design.widget.BottomNavigationView;
55
import android.support.v4.view.ViewPager;
66
import android.view.MenuItem;
7+
import android.widget.LinearLayout;
78

9+
import com.hjq.baselibrary.utils.OnClickUtils;
810
import com.hjq.demo.R;
911
import com.hjq.demo.common.CommonActivity;
1012
import com.hjq.demo.ui.adapter.HomeViewPagerAdapter;
11-
import com.hjq.baselibrary.utils.OnClickUtils;
1213
import com.hjq.toast.ToastUtils;
1314

1415
import butterknife.BindView;
@@ -20,13 +21,16 @@
2021
* desc : 主页界面
2122
*/
2223
public class HomeActivity extends CommonActivity implements
23-
ViewPager.OnPageChangeListener, BottomNavigationView.OnNavigationItemSelectedListener {
24+
ViewPager.OnPageChangeListener, Runnable,
25+
BottomNavigationView.OnNavigationItemSelectedListener {
2426

2527
@BindView(R.id.vp_home_pager)
2628
ViewPager mViewPager;
2729
@BindView(R.id.bv_home_navigation)
2830
BottomNavigationView mBottomNavigationView;
2931

32+
private HomeViewPagerAdapter mAdapter;
33+
3034
@Override
3135
protected int getLayoutId() {
3236
return R.layout.activity_home;
@@ -39,18 +43,40 @@ protected int getTitleBarId() {
3943

4044
@Override
4145
protected void initView() {
42-
// 限制页面数量
43-
mViewPager.setOffscreenPageLimit(4);
4446
mViewPager.addOnPageChangeListener(this);
4547

4648
// 不使用图标默认变色
4749
mBottomNavigationView.setItemIconTintList(null);
4850
mBottomNavigationView.setOnNavigationItemSelectedListener(this);
51+
52+
// 修复在 ViewPager 中点击 EditText 弹出软键盘导致 BottomNavigationView 还显示在 ViewPager 下面的问题
53+
postDelayed(this, 1000);
4954
}
5055

5156
@Override
5257
protected void initData() {
53-
mViewPager.setAdapter(new HomeViewPagerAdapter(this));
58+
mAdapter = new HomeViewPagerAdapter(this);
59+
mViewPager.setAdapter(mAdapter);
60+
61+
// 限制页面数量
62+
mViewPager.setOffscreenPageLimit(mAdapter.getCount());
63+
}
64+
65+
/**
66+
* {@link Runnable}
67+
*/
68+
@Override
69+
public void run() {
70+
/*
71+
父布局为LinearLayout,因为 ViewPager 使用了权重的问题
72+
软键盘在弹出的时候会把布局进行收缩,ViewPager 的高度缩小了
73+
所以 BottomNavigationView 会显示在ViewPager 下面
74+
解决方法是在 ViewPager 初始化高度后手动进行设置 ViewPager 高度并将权重设置为0
75+
*/
76+
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) mViewPager.getLayoutParams();
77+
layoutParams.height = mViewPager.getHeight();
78+
layoutParams.weight = 0;
79+
mViewPager.setLayoutParams(layoutParams);
5480
}
5581

5682
/**
@@ -134,4 +160,4 @@ public boolean isSupportSwipeBack() {
134160
// 不使用侧滑功能
135161
return !super.isSupportSwipeBack();
136162
}
137-
}
163+
}

app/src/main/java/com/hjq/demo/ui/activity/LoginActivity.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import android.widget.Button;
55
import android.widget.EditText;
66

7-
import com.hjq.baselibrary.utils.TextInputHelper;
7+
import com.hjq.baselibrary.utils.EditTextInputHelper;
88
import com.hjq.demo.R;
99
import com.hjq.demo.common.CommonActivity;
1010
import com.hjq.toast.ToastUtils;
@@ -27,7 +27,7 @@ public class LoginActivity extends CommonActivity
2727
@BindView(R.id.btn_login_commit)
2828
Button mCommitView;
2929

30-
private TextInputHelper mTextInputHelper;
30+
private EditTextInputHelper mEditTextInputHelper;
3131

3232
@Override
3333
protected int getLayoutId() {
@@ -36,14 +36,14 @@ protected int getLayoutId() {
3636

3737
@Override
3838
protected int getTitleBarId() {
39-
return R.id.tb_login_bar;
39+
return R.id.tb_login_title;
4040
}
4141

4242
@Override
4343
protected void initView() {
4444
mCommitView.setOnClickListener(this);
45-
mTextInputHelper = new TextInputHelper(mCommitView, false);
46-
mTextInputHelper.addViews(mPhoneView, mPasswordView);
45+
mEditTextInputHelper = new EditTextInputHelper(mCommitView, false);
46+
mEditTextInputHelper.addViews(mPhoneView, mPasswordView);
4747
}
4848

4949
@Override
@@ -59,7 +59,7 @@ public void onRightClick(View v) {
5959

6060
@Override
6161
protected void onDestroy() {
62-
mTextInputHelper.removeViews();
62+
mEditTextInputHelper.removeViews();
6363
super.onDestroy();
6464
}
6565

app/src/main/java/com/hjq/demo/ui/activity/RegisterActivity.java

+9-7
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
import android.widget.Button;
55
import android.widget.EditText;
66

7-
import com.hjq.baselibrary.utils.TextInputHelper;
7+
import com.hjq.baselibrary.utils.EditTextInputHelper;
8+
import com.hjq.baselibrary.widget.CountdownView;
89
import com.hjq.demo.R;
910
import com.hjq.demo.common.CommonActivity;
10-
import com.hjq.baselibrary.widget.CountdownView;
1111
import com.hjq.toast.ToastUtils;
1212

1313
import butterknife.BindView;
@@ -37,7 +37,7 @@ public class RegisterActivity extends CommonActivity
3737
@BindView(R.id.btn_register_commit)
3838
Button mCommitView;
3939

40-
private TextInputHelper mTextInputHelper;
40+
private EditTextInputHelper mEditTextInputHelper;
4141

4242
@Override
4343
protected int getLayoutId() {
@@ -46,16 +46,16 @@ protected int getLayoutId() {
4646

4747
@Override
4848
protected int getTitleBarId() {
49-
return R.id.tb_register_bar;
49+
return R.id.tb_register_title;
5050
}
5151

5252
@Override
5353
protected void initView() {
5454
mCountdownView.setOnClickListener(this);
5555
mCommitView.setOnClickListener(this);
5656

57-
mTextInputHelper = new TextInputHelper(mCommitView, false);
58-
mTextInputHelper.addViews(mPhoneView, mCodeView, mPasswordView1, mPasswordView2);
57+
mEditTextInputHelper = new EditTextInputHelper(mCommitView, false);
58+
mEditTextInputHelper.addViews(mPhoneView, mCodeView, mPasswordView1, mPasswordView2);
5959
}
6060

6161
@Override
@@ -71,6 +71,8 @@ public void onClick(View v) {
7171
if (v == mCountdownView) { //获取验证码
7272

7373
if (mPhoneView.getText().toString().length() != 11) {
74+
// 重置验证码倒计时控件
75+
mCountdownView.resetState();
7476
ToastUtils.show(getResources().getString(R.string.phone_input_error));
7577
return;
7678
}
@@ -93,7 +95,7 @@ public void onClick(View v) {
9395

9496
@Override
9597
protected void onDestroy() {
96-
mTextInputHelper.removeViews();
98+
mEditTextInputHelper.removeViews();
9799
super.onDestroy();
98100
}
99101
}

0 commit comments

Comments
 (0)