Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
yuan_ht
BlackHaoUtil
提交
ea3e36e8
B
BlackHaoUtil
项目概览
yuan_ht
/
BlackHaoUtil
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
B
BlackHaoUtil
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ea3e36e8
编写于
12月 21, 2018
作者:
Black_Hao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add Base Mvp
Add Base Mvp Activity,Fragment,Impl.
上级
fbba6c45
变更
24
隐藏空白更改
内联
并排
Showing
24 changed file
with
1197 addition
and
16 deletion
+1197
-16
app/src/main/AndroidManifest.xml
app/src/main/AndroidManifest.xml
+4
-3
app/src/main/java/com/balckhao/blackhaoutil/MainActivity.java
...src/main/java/com/balckhao/blackhaoutil/MainActivity.java
+9
-0
app/src/main/java/com/balckhao/blackhaoutil/base/BaseActivity.java
...ain/java/com/balckhao/blackhaoutil/base/BaseActivity.java
+7
-2
app/src/main/java/com/balckhao/blackhaoutil/base/BaseFragment.java
...ain/java/com/balckhao/blackhaoutil/base/BaseFragment.java
+3
-2
app/src/main/java/com/balckhao/blackhaoutil/base/LoadingDialog.java
...in/java/com/balckhao/blackhaoutil/base/LoadingDialog.java
+67
-0
app/src/main/java/com/balckhao/blackhaoutil/base/test/TestActivity.java
...ava/com/balckhao/blackhaoutil/base/test/TestActivity.java
+2
-1
app/src/main/java/com/balckhao/blackhaoutil/base/test/TestAdapter.java
...java/com/balckhao/blackhaoutil/base/test/TestAdapter.java
+3
-2
app/src/main/java/com/balckhao/blackhaoutil/base/test/TestFragment.java
...ava/com/balckhao/blackhaoutil/base/test/TestFragment.java
+2
-1
app/src/main/java/com/balckhao/blackhaoutil/logUtil/LogUtil.java
.../main/java/com/balckhao/blackhaoutil/logUtil/LogUtil.java
+1
-1
app/src/main/java/com/balckhao/blackhaoutil/mvp/BaseMvpActivity.java
...n/java/com/balckhao/blackhaoutil/mvp/BaseMvpActivity.java
+401
-0
app/src/main/java/com/balckhao/blackhaoutil/mvp/BaseMvpFragment.java
...n/java/com/balckhao/blackhaoutil/mvp/BaseMvpFragment.java
+246
-0
app/src/main/java/com/balckhao/blackhaoutil/mvp/BaseMvpPresenter.java
.../java/com/balckhao/blackhaoutil/mvp/BaseMvpPresenter.java
+70
-0
app/src/main/java/com/balckhao/blackhaoutil/mvp/BaseMvpPresenterImpl.java
...a/com/balckhao/blackhaoutil/mvp/BaseMvpPresenterImpl.java
+32
-0
app/src/main/java/com/balckhao/blackhaoutil/mvp/BaseMvpViewImpl.java
...n/java/com/balckhao/blackhaoutil/mvp/BaseMvpViewImpl.java
+28
-0
app/src/main/java/com/balckhao/blackhaoutil/mvp/test/MvpTestActivity.java
...a/com/balckhao/blackhaoutil/mvp/test/MvpTestActivity.java
+67
-0
app/src/main/java/com/balckhao/blackhaoutil/mvp/test/MvpTestFragment.java
...a/com/balckhao/blackhaoutil/mvp/test/MvpTestFragment.java
+64
-0
app/src/main/java/com/balckhao/blackhaoutil/mvp/test/TestMvpContract.java
...a/com/balckhao/blackhaoutil/mvp/test/TestMvpContract.java
+25
-0
app/src/main/java/com/balckhao/blackhaoutil/mvp/test/TestPresenter.java
...ava/com/balckhao/blackhaoutil/mvp/test/TestPresenter.java
+45
-0
app/src/main/java/com/balckhao/blackhaoutil/spUtil/SharedPreferencesUtil.java
...m/balckhao/blackhaoutil/spUtil/SharedPreferencesUtil.java
+3
-4
app/src/main/res/drawable/icon_loading.xml
app/src/main/res/drawable/icon_loading.xml
+26
-0
app/src/main/res/layout/activity_main.xml
app/src/main/res/layout/activity_main.xml
+20
-0
app/src/main/res/layout/activity_mvp_test.xml
app/src/main/res/layout/activity_mvp_test.xml
+46
-0
app/src/main/res/layout/fragment_dialog_loading.xml
app/src/main/res/layout/fragment_dialog_loading.xml
+25
-0
app/src/main/res/values/strings.xml
app/src/main/res/values/strings.xml
+1
-0
未找到文件。
app/src/main/AndroidManifest.xml
浏览文件 @
ea3e36e8
...
...
@@ -21,15 +21,16 @@
android:roundIcon=
"@mipmap/ic_launcher_round"
android:supportsRtl=
"true"
android:theme=
"@style/AppTheme"
>
<activity
android:name=
".
base.Test
Activity"
>
<activity
android:name=
".
Main
Activity"
>
<intent-filter>
<action
android:name=
"android.intent.action.MAIN"
/>
<category
android:name=
"android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
<activity
android:name=
".usbUtil.UsbTestActivity"
/>
<!--<activity android:name=".base.TestActivity" />-->
<activity
android:name=
".usbUtil.UsbTestActivity"
/>
<activity
android:name=
".base.test.TestActivity"
/>
<activity
android:name=
".mvp.test.MvpTestActivity"
/>
</application>
</manifest>
\ No newline at end of file
app/src/main/java/com/balckhao/blackhaoutil/MainActivity.java
浏览文件 @
ea3e36e8
...
...
@@ -5,6 +5,8 @@ import android.os.Bundle;
import
android.support.v7.app.AppCompatActivity
;
import
android.view.View
;
import
com.balckhao.blackhaoutil.base.test.TestActivity
;
import
com.balckhao.blackhaoutil.mvp.test.MvpTestActivity
;
import
com.balckhao.blackhaoutil.usbUtil.UsbTestActivity
;
public
class
MainActivity
extends
AppCompatActivity
{
...
...
@@ -21,6 +23,13 @@ public class MainActivity extends AppCompatActivity {
Intent
usbIntent
=
new
Intent
(
this
,
UsbTestActivity
.
class
);
startActivity
(
usbIntent
);
break
;
case
R
.
id
.
log_base_test
:
Intent
logIntent
=
new
Intent
(
this
,
TestActivity
.
class
);
startActivity
(
logIntent
);
break
;
case
R
.
id
.
mvp_base_test
:
startActivity
(
new
Intent
(
this
,
MvpTestActivity
.
class
));
break
;
}
}
}
app/src/main/java/com/balckhao/blackhaoutil/base/BaseActivity.java
浏览文件 @
ea3e36e8
package
com.balckhao.blackhaoutil.base
;
import
android.annotation.StringRes
;
import
android.content.Intent
;
import
android.graphics.Color
;
import
android.os.Build
;
import
android.os.Bundle
;
import
android.os.Handler
;
import
android.os.Message
;
import
android.support.annotation.IdRes
;
import
android.support.v4.app.Fragment
;
import
android.support.v4.app.FragmentTransaction
;
import
android.support.v7.app.AppCompatActivity
;
import
android.util.SparseArray
;
import
android.view.View
;
import
android.view.Window
;
import
android.view.WindowManager
;
import
android.widget.Toast
;
...
...
@@ -109,7 +114,7 @@ public abstract class BaseActivity extends AppCompatActivity {
/**
* 显示 Toast(可以在子线程中调用)
*/
public
void
showToast
(
int
strId
)
{
public
void
showToast
(
@StringRes
int
strId
)
{
showToast
(
getString
(
strId
));
}
...
...
@@ -119,7 +124,7 @@ public abstract class BaseActivity extends AppCompatActivity {
* @param frameId frameLayout id
* @param showFragment 需要显示的 Fragment
*/
public
void
replaceFragment
(
int
frameId
,
Fragment
showFragment
)
{
public
void
replaceFragment
(
@IdRes
int
frameId
,
Fragment
showFragment
)
{
Fragment
currentFragment
=
fragmentArray
.
get
(
frameId
);
FragmentTransaction
transaction
=
getSupportFragmentManager
().
beginTransaction
();
//用于fragment的显示与隐藏
...
...
app/src/main/java/com/balckhao/blackhaoutil/base/BaseFragment.java
浏览文件 @
ea3e36e8
...
...
@@ -2,6 +2,7 @@ package com.balckhao.blackhaoutil.base;
import
android.os.Bundle
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.StringRes
;
import
android.support.v4.app.Fragment
;
import
android.support.v4.app.FragmentTransaction
;
import
android.util.SparseArray
;
...
...
@@ -77,9 +78,9 @@ public abstract class BaseFragment extends Fragment {
}
/**
* 显示Toast(可以在子线程中调用)
* 显示
Toast(可以在子线程中调用)
*/
public
void
showToast
(
int
strId
)
{
public
void
showToast
(
@StringRes
int
strId
)
{
baseActivity
.
showToast
(
strId
);
}
...
...
app/src/main/java/com/balckhao/blackhaoutil/base/LoadingDialog.java
0 → 100644
浏览文件 @
ea3e36e8
package
com.balckhao.blackhaoutil.base
;
import
android.graphics.Color
;
import
android.graphics.drawable.ColorDrawable
;
import
android.os.Bundle
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.StringRes
;
import
android.support.v4.app.DialogFragment
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.view.animation.Animation
;
import
android.view.animation.LinearInterpolator
;
import
android.view.animation.RotateAnimation
;
import
android.widget.TextView
;
import
com.balckhao.blackhaoutil.R
;
/**
* Author : BlackHao
* Time : 2018/12/4 16:30
* Description : 加载框
*/
public
class
LoadingDialog
extends
DialogFragment
{
private
String
loadingTxt
=
""
;
private
TextView
tvMsg
;
@Nullable
@Override
public
View
onCreateView
(
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
getDialog
().
getWindow
().
setBackgroundDrawable
(
new
ColorDrawable
(
Color
.
TRANSPARENT
));
View
view
=
inflater
.
inflate
(
R
.
layout
.
fragment_dialog_loading
,
container
,
false
);
tvMsg
=
(
TextView
)
view
.
findViewById
(
R
.
id
.
login_status_message
);
if
(!
loadingTxt
.
equals
(
""
))
{
tvMsg
.
setText
(
loadingTxt
);
}
//设置动画
RotateAnimation
animation
=
new
RotateAnimation
(
0
,
360
f
,
Animation
.
RELATIVE_TO_SELF
,
0.5f
,
Animation
.
RELATIVE_TO_SELF
,
0.5f
);
animation
.
setDuration
(
1000
);
animation
.
setFillAfter
(
true
);
animation
.
setInterpolator
(
new
LinearInterpolator
());
animation
.
setRepeatMode
(
Animation
.
RESTART
);
animation
.
setRepeatCount
(
Animation
.
INFINITE
);
view
.
findViewById
(
R
.
id
.
loading_img
).
startAnimation
(
animation
);
return
view
;
}
@Override
public
void
onViewCreated
(
View
view
,
@Nullable
Bundle
savedInstanceState
)
{
super
.
onViewCreated
(
view
,
savedInstanceState
);
setCancelable
(
false
);
}
public
void
setLoadingTxt
(
String
loadingTxt
)
{
this
.
loadingTxt
=
loadingTxt
;
if
(
this
.
tvMsg
!=
null
)
{
this
.
tvMsg
.
setText
(
loadingTxt
);
}
}
public
void
setLoadingTxt
(
@StringRes
int
strId
)
{
setLoadingTxt
(
getString
(
strId
));
}
}
app/src/main/java/com/balckhao/blackhaoutil/base/TestActivity.java
→
app/src/main/java/com/balckhao/blackhaoutil/base/
test/
TestActivity.java
浏览文件 @
ea3e36e8
package
com.balckhao.blackhaoutil.base
;
package
com.balckhao.blackhaoutil.base
.test
;
import
android.os.Message
;
import
android.widget.TextView
;
import
com.balckhao.blackhaoutil.R
;
import
com.balckhao.blackhaoutil.base.BaseActivity
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
...
...
app/src/main/java/com/balckhao/blackhaoutil/base/TestAdapter.java
→
app/src/main/java/com/balckhao/blackhaoutil/base/
test/
TestAdapter.java
浏览文件 @
ea3e36e8
package
com.balckhao.blackhaoutil.base
;
package
com.balckhao.blackhaoutil.base
.test
;
import
android.content.Context
;
import
android.widget.ImageView
;
import
android.widget.TextView
;
import
com.balckhao.blackhaoutil.R
;
import
com.balckhao.blackhaoutil.base.CommonBaseAdapter
;
import
java.util.List
;
/**
* Author : BlackHao
* Time : 2018/9/4 14:58
* Description :
* Description :
TestAdapter
*/
public
class
TestAdapter
extends
CommonBaseAdapter
<
String
>
{
...
...
app/src/main/java/com/balckhao/blackhaoutil/base/TestFragment.java
→
app/src/main/java/com/balckhao/blackhaoutil/base/
test/
TestFragment.java
浏览文件 @
ea3e36e8
package
com.balckhao.blackhaoutil.base
;
package
com.balckhao.blackhaoutil.base
.test
;
import
android.view.View
;
import
android.widget.ImageView
;
import
android.widget.ListView
;
import
com.balckhao.blackhaoutil.R
;
import
com.balckhao.blackhaoutil.base.BaseFragment
;
import
java.util.ArrayList
;
...
...
app/src/main/java/com/balckhao/blackhaoutil/logUtil/LogUtil.java
浏览文件 @
ea3e36e8
...
...
@@ -119,7 +119,7 @@ public class LogUtil {
}
/**
* 数据分割成不超过MAX_LENGTH的数据
* 数据分割成不超过
MAX_LENGTH的数据
*
* @param str 需要分割的数据
* @return 分割后的数组
...
...
app/src/main/java/com/balckhao/blackhaoutil/mvp/BaseMvpActivity.java
0 → 100644
浏览文件 @
ea3e36e8
package
com.balckhao.blackhaoutil.mvp
;
import
android.annotation.StringRes
;
import
android.content.Intent
;
import
android.graphics.Color
;
import
android.os.Build
;
import
android.os.Bundle
;
import
android.os.Handler
;
import
android.os.Looper
;
import
android.os.Message
;
import
android.support.annotation.IdRes
;
import
android.support.v4.app.Fragment
;
import
android.support.v4.app.FragmentTransaction
;
import
android.support.v7.app.ActionBar
;
import
android.support.v7.app.AppCompatActivity
;
import
android.util.SparseArray
;
import
android.view.View
;
import
android.view.Window
;
import
android.view.WindowManager
;
import
android.widget.Toast
;
import
com.balckhao.blackhaoutil.base.LoadingDialog
;
import
com.balckhao.blackhaoutil.logUtil.LogUtil
;
import
java.lang.ref.WeakReference
;
/**
* Author : BlackHao
* Time : 2018/12/20 16:38
* Description : Base MVP Activity
*/
public
abstract
class
BaseMvpActivity
<
T
extends
BaseMvpPresenterImpl
>
extends
AppCompatActivity
implements
BaseMvpViewImpl
{
//Handler
public
WeakHandler
handler
;
//用于保存对应 FrameLayout当前显示的 Fragment
private
SparseArray
<
Fragment
>
fragmentArray
;
//LogUtil
public
LogUtil
log
;
//加载框
private
LoadingDialog
loadingDialog
;
// Presenter
private
T
mPresenter
;
//使用状态栏模式
private
int
statusMode
=
-
1
;
/**
* 不使用状态栏
*/
public
static
int
NO_STATUS
=
-
1
;
/**
* 沉浸式状态栏
*/
public
static
int
TRANSLUCENT_STATUS
=
1
;
/**
* 隐藏状态栏
*/
public
static
int
HIDE_STATUS
=
2
;
/**
* 全屏(隐藏状态栏和导航栏)
*/
public
static
int
FULL_SCREEN_STATUS
=
3
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
//初始化Log
log
=
LogUtil
.
getInstance
();
//初始化fragmentArray
fragmentArray
=
new
SparseArray
<>();
//
loadingDialog
=
new
LoadingDialog
();
//获取presenter
mPresenter
=
initPresenter
();
if
(
mPresenter
!=
null
)
mPresenter
.
onViewCreate
();
//初始化UI
initUI
();
//初始化weakHandler
initHandler
();
//隐藏 ActionBar
if
(
getSupportActionBar
()
!=
null
)
{
getSupportActionBar
().
hide
();
}
//更改状态栏模式
statusMode
=
getStatusMode
();
if
(
statusMode
==
TRANSLUCENT_STATUS
)
{
translucentStatus
();
}
else
if
(
statusMode
==
HIDE_STATUS
)
{
hideStatusBar
();
}
//view 初始化完成
getWindow
().
getDecorView
().
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
//
if
(
mPresenter
!=
null
)
mPresenter
.
onViewCreated
();
//初始化数据
initData
();
//添加listener
initListener
();
}
});
}
/**
* 初始化UI
*/
protected
abstract
void
initUI
();
/**
* UI初始化完成,初始化数据
*/
protected
abstract
void
initData
();
/**
* UI初始化完成,初始化接口
*/
protected
abstract
void
initListener
();
/**
* 子类要处理 handler的消息,重写该方法
*/
protected
abstract
void
handleMessage
(
Message
msg
);
/**
* 初始化 Handler
*/
private
void
initHandler
()
{
handler
=
new
WeakHandler
(
this
);
}
/**
* 初始化 presenter
*/
protected
abstract
T
initPresenter
();
/**
* 获取 presenter
*/
public
T
getPresenter
()
{
return
mPresenter
;
}
/**
* 获取状态栏模式(默认无状态栏模式,修改状态栏模式只需重写该方法)
*/
public
int
getStatusMode
()
{
return
NO_STATUS
;
}
/**
* 显示 Toast(可以在子线程中调用)
*/
@Override
public
void
showToast
(
final
String
str
)
{
if
(!
isUIThread
())
{
handler
.
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
showToast
(
str
);
}
});
return
;
}
Toast
.
makeText
(
BaseMvpActivity
.
this
,
str
,
Toast
.
LENGTH_SHORT
).
show
();
}
/**
* 显示 Toast(可以在子线程中调用)
*/
@Override
public
void
showToast
(
@StringRes
int
strId
)
{
showToast
(
getString
(
strId
));
}
/**
* 加载框相关
*/
@Override
public
void
showLoading
(
@StringRes
int
strId
)
{
showLoading
(
getString
(
strId
));
}
@Override
public
void
showLoading
(
final
String
str
)
{
if
(!
isUIThread
())
{
handler
.
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
showLoading
(
str
);
}
});
return
;
}
log
.
e
(
"show : "
+
str
);
loadingDialog
.
setLoadingTxt
(
str
);
loadingDialog
.
show
(
getSupportFragmentManager
(),
"loading"
);
}
@Override
public
void
showLoading
()
{
showLoading
(
""
);
}
@Override
public
void
dismissLoading
()
{
if
(!
isUIThread
())
{
handler
.
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
dismissLoading
();
}
});
return
;
}
loadingDialog
.
dismiss
();
}
/**
* 替换 fragment
*
* @param frameId frameLayout id
* @param showFragment 需要显示的 Fragment
*/
public
void
replaceFragment
(
@IdRes
int
frameId
,
Fragment
showFragment
)
{
Fragment
currentFragment
=
fragmentArray
.
get
(
frameId
);
FragmentTransaction
transaction
=
getSupportFragmentManager
().
beginTransaction
();
//用于fragment的显示与隐藏
if
(
currentFragment
!=
null
&&
currentFragment
!=
showFragment
)
{
if
(!
showFragment
.
isAdded
())
{
// 先判断是否被add过
transaction
.
hide
(
currentFragment
).
add
(
frameId
,
showFragment
).
commit
();
// 隐藏当前的fragment,add下一个到Activity中
}
else
{
transaction
.
hide
(
currentFragment
).
show
(
showFragment
).
commit
();
// 隐藏当前的fragment,显示下一个
}
fragmentArray
.
put
(
frameId
,
showFragment
);
}
else
if
(
currentFragment
==
null
)
{
if
(!
showFragment
.
isAdded
())
{
// 先判断是否被add过
transaction
.
add
(
frameId
,
showFragment
).
commit
();
// 隐藏当前的fragment,add下一个到Activity中
}
else
{
transaction
.
show
(
showFragment
).
commit
();
// 隐藏当前的fragment,显示下一个
}
fragmentArray
.
put
(
frameId
,
showFragment
);
}
}
/**
* activity 跳转
*
* @param target 需要跳转的 Activity
* @param bundle bundle
* @param isCloseSelf 是否关闭当前的 activity
*/
public
void
openActivity
(
Class
<?>
target
,
Bundle
bundle
,
boolean
isCloseSelf
)
{
Intent
intent
=
new
Intent
(
this
,
target
);
if
(
bundle
!=
null
)
{
intent
.
putExtras
(
bundle
);
}
startActivity
(
intent
);
if
(
isCloseSelf
)
{
finish
();
}
}
/**
* activity 跳转(不需要传值)
*
* @param target 需要跳转的Activity
*/
public
void
openActivity
(
Class
<?>
target
)
{
openActivity
(
target
,
null
,
false
);
}
/**
* activity 跳转
*
* @param target 需要跳转的 Activity
* @param bundle bundle
* @param requestCode requestCode
*/
public
void
openActivityForResult
(
Class
<?>
target
,
Bundle
bundle
,
int
requestCode
)
{
Intent
intent
=
new
Intent
(
this
,
target
);
if
(
bundle
!=
null
)
{
intent
.
putExtras
(
bundle
);
}
startActivityForResult
(
intent
,
requestCode
);
}
/**
* 生命周期相关
*/
@Override
protected
void
onResume
()
{
super
.
onResume
();
if
(
mPresenter
!=
null
)
mPresenter
.
onResume
();
}
@Override
protected
void
onPause
()
{
super
.
onPause
();
if
(
mPresenter
!=
null
)
mPresenter
.
onPause
();
}
@Override
protected
void
onStart
()
{
super
.
onStart
();
if
(
mPresenter
!=
null
)
mPresenter
.
onStart
();
}
@Override
protected
void
onDestroy
()
{
super
.
onDestroy
();
if
(
mPresenter
!=
null
)
mPresenter
.
onDestroy
();
}
@Override
protected
void
onStop
()
{
super
.
onStop
();
if
(
mPresenter
!=
null
)
mPresenter
.
onStop
();
}
/**
* 判断当前线程是否在主线程
*/
public
boolean
isUIThread
()
{
return
Thread
.
currentThread
().
getId
()
==
Looper
.
getMainLooper
().
getThread
().
getId
();
}
/**
* 沉浸式状态栏
*/
public
void
translucentStatus
()
{
//5.0及以上系统才支持
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
L
)
{
View
decorView
=
getWindow
().
getDecorView
();
int
option
=
View
.
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
View
.
SYSTEM_UI_FLAG_LAYOUT_STABLE
;
decorView
.
setSystemUiVisibility
(
option
);
getWindow
().
setStatusBarColor
(
Color
.
TRANSPARENT
);
}
}
/**
* 隐藏状态栏
*/
public
void
hideStatusBar
()
{
View
decorView
=
getWindow
().
getDecorView
();
int
option
=
View
.
SYSTEM_UI_FLAG_FULLSCREEN
;
decorView
.
setSystemUiVisibility
(
option
);
}
@Override
public
void
onWindowFocusChanged
(
boolean
hasFocus
)
{
super
.
onWindowFocusChanged
(
hasFocus
);
//Android 4.4及以上系统才支持
if
(
statusMode
==
FULL_SCREEN_STATUS
&&
hasFocus
&&
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
KITKAT
)
{
View
decorView
=
getWindow
().
getDecorView
();
decorView
.
setSystemUiVisibility
(
View
.
SYSTEM_UI_FLAG_LAYOUT_STABLE
|
View
.
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|
View
.
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
View
.
SYSTEM_UI_FLAG_HIDE_NAVIGATION
|
View
.
SYSTEM_UI_FLAG_FULLSCREEN
|
View
.
SYSTEM_UI_FLAG_IMMERSIVE_STICKY
);
}
}
/**
* 弱引用 handler
*/
public
static
class
WeakHandler
extends
Handler
{
WeakReference
weakReference
;
WeakHandler
(
BaseMvpActivity
activity
)
{
this
.
weakReference
=
new
WeakReference
<>(
activity
);
}
@Override
public
void
handleMessage
(
Message
msg
)
{
super
.
handleMessage
(
msg
);
BaseMvpActivity
activity
=
(
BaseMvpActivity
)
weakReference
.
get
();
switch
(
msg
.
what
)
{
default
:
if
(
activity
!=
null
)
{
activity
.
handleMessage
(
msg
);
}
break
;
}
}
}
}
\ No newline at end of file
app/src/main/java/com/balckhao/blackhaoutil/mvp/BaseMvpFragment.java
0 → 100644
浏览文件 @
ea3e36e8
package
com.balckhao.blackhaoutil.mvp
;
import
android.annotation.StringRes
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
android.support.annotation.IdRes
;
import
android.support.annotation.Nullable
;
import
android.support.v4.app.Fragment
;
import
android.support.v4.app.FragmentTransaction
;
import
android.util.SparseArray
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
com.balckhao.blackhaoutil.logUtil.LogUtil
;
/**
* Author : BlackHao
* Time : 2018/12/20 16:38
* Description : Base MVP Fragment (必须在 BaseMvpActivity 中调用)
*/
public
abstract
class
BaseMvpFragment
<
T
extends
BaseMvpPresenterImpl
>
extends
Fragment
implements
BaseMvpViewImpl
{
//用于保存对应 FrameLayout当前显示的 Fragment
private
SparseArray
<
Fragment
>
fragmentArray
;
//LogUtil
public
LogUtil
log
;
// Presenter
private
T
mPresenter
;
//Activity
private
BaseMvpActivity
activity
;
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
activity
=
(
BaseMvpActivity
)
getActivity
();
mPresenter
=
initPresenter
();
//
fragmentArray
=
new
SparseArray
<>();
log
=
activity
.
log
;
}
@Nullable
@Override
public
View
onCreateView
(
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
View
view
=
inflater
.
inflate
(
initLayoutId
(),
container
,
false
);
initUI
(
view
);
//
if
(
mPresenter
!=
null
)
mPresenter
.
onViewCreate
();
return
view
;
}
@Override
public
void
onViewCreated
(
View
view
,
@Nullable
Bundle
savedInstanceState
)
{
super
.
onViewCreated
(
view
,
savedInstanceState
);
initData
();
initListener
();
if
(
mPresenter
!=
null
)
mPresenter
.
onViewCreated
();
}
/**
* 初始化UI
*/
protected
abstract
int
initLayoutId
();
/**
* 初始化UI
*/
protected
abstract
void
initUI
(
View
view
);
/**
* UI初始化完成,初始化数据
*/
protected
abstract
void
initData
();
/**
* UI初始化完成,初始化接口
*/
protected
abstract
void
initListener
();
/**
* 初始化 presenter
*/
protected
abstract
T
initPresenter
();
/**
* 获取 presenter
*/
public
T
getPresenter
()
{
return
mPresenter
;
}
/**
* 显示 Toast(可以在子线程中调用)
*/
@Override
public
void
showToast
(
final
String
str
)
{
activity
.
showToast
(
str
);
}
/**
* 显示 Toast(可以在子线程中调用)
*/
@Override
public
void
showToast
(
@StringRes
int
strId
)
{
showToast
(
getString
(
strId
));
}
/**
* 加载框相关
*/
@Override
public
void
showLoading
(
@StringRes
int
strId
)
{
showLoading
(
getString
(
strId
));
}
@Override
public
void
showLoading
(
String
str
)
{
activity
.
showLoading
(
str
);
}
@Override
public
void
showLoading
()
{
activity
.
showLoading
();
}
@Override
public
void
dismissLoading
()
{
activity
.
dismissLoading
();
}
/**
* 替换 fragment
*
* @param frameId frameLayout id
* @param showFragment 需要显示的 Fragment
*/
public
void
replaceFragment
(
@IdRes
int
frameId
,
Fragment
showFragment
)
{
Fragment
currentFragment
=
fragmentArray
.
get
(
frameId
);
FragmentTransaction
transaction
=
getFragmentManager
().
beginTransaction
();
//用于fragment的显示与隐藏
if
(
currentFragment
!=
null
&&
currentFragment
!=
showFragment
)
{
if
(!
showFragment
.
isAdded
())
{
// 先判断是否被add过
transaction
.
hide
(
currentFragment
).
add
(
frameId
,
showFragment
).
commit
();
// 隐藏当前的fragment,add下一个到Activity中
}
else
{
transaction
.
hide
(
currentFragment
).
show
(
showFragment
).
commit
();
// 隐藏当前的fragment,显示下一个
}
fragmentArray
.
put
(
frameId
,
showFragment
);
}
else
if
(
currentFragment
==
null
)
{
if
(!
showFragment
.
isAdded
())
{
// 先判断是否被add过
transaction
.
add
(
frameId
,
showFragment
).
commit
();
// 隐藏当前的fragment,add下一个到Activity中
}
else
{
transaction
.
show
(
showFragment
).
commit
();
// 隐藏当前的fragment,显示下一个
}
fragmentArray
.
put
(
frameId
,
showFragment
);
}
}
/**
* activity 跳转
*
* @param target 需要跳转的 Activity
* @param bundle bundle
* @param isCloseSelf 是否关闭当前的 activity
*/
public
void
openActivity
(
Class
<?>
target
,
Bundle
bundle
,
boolean
isCloseSelf
)
{
Intent
intent
=
new
Intent
(
getContext
(),
target
);
if
(
bundle
!=
null
)
{
intent
.
putExtras
(
bundle
);
}
startActivity
(
intent
);
if
(
isCloseSelf
)
{
activity
.
finish
();
}
}
/**
* activity 跳转(不需要传值)
*
* @param target 需要跳转的Activity
*/
public
void
openActivity
(
Class
<?>
target
)
{
openActivity
(
target
,
null
,
false
);
}
/**
* activity 跳转
*
* @param target 需要跳转的 Activity
* @param bundle bundle
* @param requestCode requestCode
*/
public
void
openActivityForResult
(
Class
<?>
target
,
Bundle
bundle
,
int
requestCode
)
{
Intent
intent
=
new
Intent
(
getContext
(),
target
);
if
(
bundle
!=
null
)
{
intent
.
putExtras
(
bundle
);
}
startActivityForResult
(
intent
,
requestCode
);
}
/**
* 生命周期相关
*/
@Override
public
void
onResume
()
{
super
.
onResume
();
if
(
mPresenter
!=
null
)
mPresenter
.
onResume
();
}
@Override
public
void
onPause
()
{
super
.
onPause
();
if
(
mPresenter
!=
null
)
mPresenter
.
onPause
();
}
@Override
public
void
onStart
()
{
super
.
onStart
();
if
(
mPresenter
!=
null
)
mPresenter
.
onStart
();
}
@Override
public
void
onDestroy
()
{
super
.
onDestroy
();
if
(
mPresenter
!=
null
)
mPresenter
.
onDestroy
();
}
@Override
public
void
onStop
()
{
super
.
onStop
();
if
(
mPresenter
!=
null
)
mPresenter
.
onStop
();
}
}
\ No newline at end of file
app/src/main/java/com/balckhao/blackhaoutil/mvp/BaseMvpPresenter.java
0 → 100644
浏览文件 @
ea3e36e8
package
com.balckhao.blackhaoutil.mvp
;
import
android.content.Context
;
import
android.view.View
;
import
java.lang.ref.WeakReference
;
/**
* Author : BlackHao
* Time : 2018/12/20 09:05
* Description : Presenter 封装
*/
public
abstract
class
BaseMvpPresenter
<
T
extends
BaseMvpViewImpl
>
implements
BaseMvpPresenterImpl
{
/**
* 弱引用持有
*/
private
WeakReference
<
T
>
mView
;
private
WeakReference
<
Context
>
mContext
;
public
BaseMvpPresenter
(
Context
context
,
T
mView
)
{
this
.
mView
=
new
WeakReference
<>(
mView
);
this
.
mContext
=
new
WeakReference
<>(
context
);
}
public
T
getView
()
{
return
mView
.
get
();
}
public
Context
getContext
()
{
return
mContext
.
get
();
}
@Override
public
void
onViewCreate
()
{
}
@Override
public
void
onViewCreated
()
{
}
@Override
public
void
onResume
()
{
}
@Override
public
void
onStart
()
{
}
@Override
public
void
onPause
()
{
}
@Override
public
void
onStop
()
{
}
@Override
public
void
onDestroy
()
{
}
}
app/src/main/java/com/balckhao/blackhaoutil/mvp/BaseMvpPresenterImpl.java
0 → 100644
浏览文件 @
ea3e36e8
package
com.balckhao.blackhaoutil.mvp
;
/**
* Author : BlackHao
* Time : 2018/12/19 19:48
* Description : Presenter 封装
*/
public
interface
BaseMvpPresenterImpl
{
/**
* 开始创建 View
*/
void
onViewCreate
();
/**
* View 创建完成
*/
void
onViewCreated
();
/**
* Activity / fragment 生命周期
*/
void
onResume
();
void
onStart
();
void
onPause
();
void
onStop
();
void
onDestroy
();
}
app/src/main/java/com/balckhao/blackhaoutil/mvp/BaseMvpViewImpl.java
0 → 100644
浏览文件 @
ea3e36e8
package
com.balckhao.blackhaoutil.mvp
;
import
android.support.annotation.StringRes
;
/**
* Author : BlackHao
* Time : 2018/12/19 19:11
* Description : View 层基类
*/
public
interface
BaseMvpViewImpl
{
/**
* Toast相关
*/
void
showToast
(
@StringRes
int
strId
);
void
showToast
(
String
str
);
/**
* 加载框相关
*/
void
showLoading
(
@StringRes
int
strId
);
void
showLoading
(
String
str
);
void
showLoading
();
void
dismissLoading
();
}
app/src/main/java/com/balckhao/blackhaoutil/mvp/test/MvpTestActivity.java
0 → 100644
浏览文件 @
ea3e36e8
package
com.balckhao.blackhaoutil.mvp.test
;
import
android.os.Handler
;
import
android.os.Message
;
import
android.view.View
;
import
android.widget.EditText
;
import
android.widget.TextView
;
import
com.balckhao.blackhaoutil.R
;
import
com.balckhao.blackhaoutil.mvp.BaseMvpActivity
;
/**
* Author : BlackHao
* Time : 2018/12/20 10:15
* Description :
*/
public
class
MvpTestActivity
extends
BaseMvpActivity
<
TestMvpContract
.
TestPresenterImpl
>
implements
TestMvpContract
.
TestViewImpl
{
private
EditText
etName
;
private
EditText
etPsw
;
private
TextView
tvLoginResult
;
@Override
protected
void
initUI
()
{
setContentView
(
R
.
layout
.
activity_mvp_test
);
etName
=
(
EditText
)
findViewById
(
R
.
id
.
et_name
);
etPsw
=
(
EditText
)
findViewById
(
R
.
id
.
et_psw
);
tvLoginResult
=
(
TextView
)
findViewById
(
R
.
id
.
tv_login_result
);
replaceFragment
(
R
.
id
.
fl_test
,
new
MvpTestFragment
());
}
@Override
public
int
getStatusMode
()
{
return
TRANSLUCENT_STATUS
;
}
@Override
protected
void
initData
()
{
}
@Override
protected
void
initListener
()
{
}
@Override
protected
void
handleMessage
(
Message
msg
)
{
log
.
e
(
msg
.
what
+
""
);
}
@Override
protected
TestMvpContract
.
TestPresenterImpl
initPresenter
()
{
return
new
TestPresenter
(
this
,
this
);
}
@Override
public
void
loginResult
(
String
txt
)
{
tvLoginResult
.
setText
(
txt
);
handler
.
sendEmptyMessage
(
0
);
}
public
void
onClick
(
View
view
)
{
getPresenter
().
login
(
etName
.
getText
().
toString
(),
etPsw
.
getText
().
toString
());
}
}
app/src/main/java/com/balckhao/blackhaoutil/mvp/test/MvpTestFragment.java
0 → 100644
浏览文件 @
ea3e36e8
package
com.balckhao.blackhaoutil.mvp.test
;
import
android.graphics.Color
;
import
android.os.Message
;
import
android.view.View
;
import
android.widget.EditText
;
import
android.widget.TextView
;
import
com.balckhao.blackhaoutil.R
;
import
com.balckhao.blackhaoutil.mvp.BaseMvpActivity
;
import
com.balckhao.blackhaoutil.mvp.BaseMvpFragment
;
/**
* Author : BlackHao
* Time : 2018/12/20 10:15
* Description :
*/
public
class
MvpTestFragment
extends
BaseMvpFragment
<
TestMvpContract
.
TestPresenterImpl
>
implements
TestMvpContract
.
TestViewImpl
,
View
.
OnClickListener
{
private
EditText
etName
;
private
EditText
etPsw
;
private
TextView
tvLoginResult
;
@Override
protected
int
initLayoutId
()
{
return
R
.
layout
.
activity_mvp_test
;
}
@Override
protected
void
initUI
(
View
view
)
{
etName
=
(
EditText
)
view
.
findViewById
(
R
.
id
.
et_name
);
etPsw
=
(
EditText
)
view
.
findViewById
(
R
.
id
.
et_psw
);
tvLoginResult
=
(
TextView
)
view
.
findViewById
(
R
.
id
.
tv_login_result
);
view
.
findViewById
(
R
.
id
.
bt_login
).
setOnClickListener
(
this
);
view
.
setBackgroundColor
(
Color
.
parseColor
(
"#ebebeb"
));
}
@Override
protected
void
initData
()
{
}
@Override
protected
void
initListener
()
{
}
@Override
protected
TestMvpContract
.
TestPresenterImpl
initPresenter
()
{
return
new
TestPresenter
(
getContext
(),
this
);
}
@Override
public
void
loginResult
(
String
txt
)
{
tvLoginResult
.
setText
(
txt
);
}
@Override
public
void
onClick
(
View
view
)
{
getPresenter
().
login
(
etName
.
getText
().
toString
(),
etPsw
.
getText
().
toString
());
}
}
app/src/main/java/com/balckhao/blackhaoutil/mvp/test/TestMvpContract.java
0 → 100644
浏览文件 @
ea3e36e8
package
com.balckhao.blackhaoutil.mvp.test
;
import
com.balckhao.blackhaoutil.mvp.BaseMvpPresenterImpl
;
import
com.balckhao.blackhaoutil.mvp.BaseMvpViewImpl
;
/**
* Author : BlackHao
* Time : 2018/12/20 10:16
* Description :
*/
public
class
TestMvpContract
{
public
interface
TestViewImpl
extends
BaseMvpViewImpl
{
void
loginResult
(
String
txt
);
}
public
interface
TestPresenterImpl
extends
BaseMvpPresenterImpl
{
void
login
(
String
name
,
String
psw
);
void
loginOut
();
}
}
app/src/main/java/com/balckhao/blackhaoutil/mvp/test/TestPresenter.java
0 → 100644
浏览文件 @
ea3e36e8
package
com.balckhao.blackhaoutil.mvp.test
;
import
android.content.Context
;
import
com.balckhao.blackhaoutil.mvp.BaseMvpPresenter
;
/**
* Author : BlackHao
* Time : 2018/12/20 10:17
* Description : TestPresenter
*/
public
class
TestPresenter
extends
BaseMvpPresenter
<
TestMvpContract
.
TestViewImpl
>
implements
TestMvpContract
.
TestPresenterImpl
{
public
TestPresenter
(
Context
context
,
TestMvpContract
.
TestViewImpl
mView
)
{
super
(
context
,
mView
);
}
@Override
public
void
login
(
final
String
name
,
final
String
psw
)
{
getView
().
showLoading
(
"正在登陆..."
);
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
//休眠,模拟登陆
try
{
Thread
.
sleep
(
5
*
1000
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
if
(
name
.
equals
(
"admin"
)
&&
psw
.
equals
(
"admin"
))
{
getView
().
loginResult
(
"登陆成功,Login ID:"
+
123456
);
}
else
{
getView
().
loginResult
(
"登陆失败,用户不存在"
);
getView
().
showToast
(
"登陆失败,用户不存在"
);
}
getView
().
dismissLoading
();
}
}).
start
();
}
@Override
public
void
loginOut
()
{
}
}
app/src/main/java/com/balckhao/blackhaoutil/spUtil/SharedPreferencesUtil.java
浏览文件 @
ea3e36e8
...
...
@@ -45,7 +45,7 @@ public class SharedPreferencesUtil {
}
/**
* 保存数据到SharedPreferences
* 保存数据到
SharedPreferences
*
* @param key 键
* @param value 需要保存的数据
...
...
@@ -82,7 +82,6 @@ public class SharedPreferencesUtil {
}
catch
(
Exception
e
)
{
result
=
false
;
e
.
printStackTrace
();
// Log.e("SharedPreferencesUtil", e.toString());
}
editor
.
apply
();
return
result
;
...
...
@@ -190,10 +189,10 @@ public class SharedPreferencesUtil {
}
/**
* 获取保存的List
* 获取保存的
List
*
* @param key key
* @return 对应的
Lis
集合
* @return 对应的
List
集合
*/
public
static
<
T
>
List
<
T
>
getListData
(
String
key
,
Class
<
T
>
cls
)
{
List
<
T
>
list
=
new
ArrayList
<>();
...
...
app/src/main/res/drawable/icon_loading.xml
0 → 100644
浏览文件 @
ea3e36e8
<?xml version="1.0" encoding="utf-8"?>
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:viewportWidth=
"1024"
android:viewportHeight=
"1024"
>
<path
android:fillColor=
"#cdcdcd"
android:pathData=
"M546.463 266.293c-73.41 0-133.155-59.727-133.155-133.138C413.308 59.763 473.053
0 546.463 0s133.12 59.727 133.12 133.155c0 73.41-59.71 133.138-133.12
133.138zM263.009 372.03c-67.054 0-121.626-54.555-121.626-121.644s54.572-121.644
121.626-121.644a121.768 121.768 0 0 1 121.609 121.644c0 67.054-54.555
121.644-121.609 121.644zM142.548 647.186A107.343 107.343 0 0 1 35.31
539.896a107.343 107.343 0 0 1 107.238-107.238 107.343 107.343 0 0 1 107.22
107.237 107.343 107.343 0 0 1-107.22 107.273z m120.461 272.596a91.048 91.048 0 0
1-90.942-90.96 91.065 91.065 0 0 1 90.924-90.942 91.065 91.065 0 0 1 90.942
90.942c0 50.14-40.783 90.96-90.924 90.96zM546.463 1024a79.519 79.519 0 0
1-79.448-79.448c0-43.82 35.645-79.449 79.448-79.449a79.519 79.519 0 0 1 79.43
79.449c0 43.82-35.628 79.448-79.448 79.448z m287.744-134.285a64.194 64.194 0 0
1-64.124-64.124 64.194 64.194 0 0 1 64.124-64.123 64.194 64.194 0 0 1 64.123
64.123 64.194 64.194 0 0 1-64.123 64.124zM952.055 593.02a52.683 52.683 0 0
1-52.612-52.613 52.683 52.683 0 0 1 52.612-52.63 52.7 52.7 0 0 1 52.63 52.613
52.718 52.718 0 0 1-52.63 52.63zM793.388 254.323a40.819 40.819 0 1 0 81.655
0.017 40.819 40.819 0 0 0-81.655 0z"
/>
</vector>
\ No newline at end of file
app/src/main/res/layout/activity_main.xml
浏览文件 @
ea3e36e8
...
...
@@ -17,6 +17,26 @@
android:onClick=
"onClick"
android:text=
"UsbTest"
android:textAllCaps=
"false"
/>
<Button
android:id=
"@+id/log_base_test"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_margin=
"10dp"
android:layout_weight=
"1"
android:onClick=
"onClick"
android:text=
"LogUtil/BaseXXX"
android:textAllCaps=
"false"
/>
<Button
android:id=
"@+id/mvp_base_test"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_margin=
"10dp"
android:layout_weight=
"1"
android:onClick=
"onClick"
android:text=
"MvpBase"
android:textAllCaps=
"false"
/>
</LinearLayout>
...
...
app/src/main/res/layout/activity_mvp_test.xml
0 → 100644
浏览文件 @
ea3e36e8
<?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"
android:background=
"#26afcc"
>
<EditText
android:id=
"@+id/et_name"
android:layout_width=
"200dp"
android:layout_height=
"40dp"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"40dp"
android:hint=
"用户名"
/>
<EditText
android:id=
"@+id/et_psw"
android:layout_width=
"200dp"
android:layout_height=
"40dp"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"20dp"
android:hint=
"密码"
/>
<Button
android:id=
"@+id/bt_login"
android:layout_width=
"200dp"
android:layout_height=
"40dp"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"20dp"
android:onClick=
"onClick"
android:text=
"登陆"
/>
<TextView
android:id=
"@+id/tv_login_result"
android:layout_width=
"200dp"
android:layout_height=
"40dp"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"20dp"
android:text=
"登陆结果"
/>
<FrameLayout
android:id=
"@+id/fl_test"
android:layout_marginTop=
"10dp"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_dialog_loading.xml
0 → 100644
浏览文件 @
ea3e36e8
<?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"
>
<ImageView
android:id=
"@+id/loading_img"
android:layout_width=
"50dp"
android:layout_height=
"50dp"
android:layout_gravity=
"center_horizontal"
android:layout_marginBottom=
"8dp"
android:background=
"@drawable/icon_loading"
android:contentDescription=
"@null"
/>
<TextView
android:id=
"@+id/login_status_message"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginBottom=
"16dp"
android:layout_gravity=
"center_horizontal"
android:textColor=
"#000"
android:text=
"@string/login_progress_searching"
android:textSize=
"16sp"
/>
</LinearLayout>
\ No newline at end of file
app/src/main/res/values/strings.xml
浏览文件 @
ea3e36e8
<resources>
<string
name=
"app_name"
>
BlackHaoUtil
</string>
<string
name=
"copy_failed"
>
复制文件失败
</string>
<string
name=
"login_progress_searching"
>
正在加载…
</string>
</resources>
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录