自家製「万能」ベースBaseActivity 4.0
19537 ワード
このプロジェクトはGitHubにアップロードされました.https://github.com/kongzue/BaseActivity Fork&Starを歓迎します
このバージョンは前回の「自家用基礎Activity:BaseActivity 3.0」の更新に基づいています.http://www.jianshu.com/p/7d22397bebf1 具体的な基本的な使い方は3.0を参照してください.
警告:1.本記事のタイトルを無視してください.この「万能」は現在進行中ですので、今後も引き続き機能を充実させていきます.このベースのBaseActivityを作る目的は、今後の開発をより容易にすることです.あちこちで西を探す必要がなくなりました.
説明を追加します.1.妖怪族のsmart bar高さを計算します.2.本人がよく使うhttp要求のフレームはVollyです.慣れないので、コードの中の次の行を削除してください.なぜデフォルトバンド上の理由は、このBaseActivityのすべてのActivityが簡単にVolly要求ネットワークを使用することができます.私はこのように怠け者です.
このバージョンは前回の「自家用基礎Activity:BaseActivity 3.0」の更新に基づいています.http://www.jianshu.com/p/7d22397bebf1 具体的な基本的な使い方は3.0を参照してください.
警告:1.本記事のタイトルを無視してください.この「万能」は現在進行中ですので、今後も引き続き機能を充実させていきます.このベースのBaseActivityを作る目的は、今後の開発をより容易にすることです.あちこちで西を探す必要がなくなりました.
説明を追加します.1.妖怪族のsmart bar高さを計算します.2.本人がよく使うhttp要求のフレームはVollyです.慣れないので、コードの中の次の行を削除してください.なぜデフォルトバンド上の理由は、このBaseActivityのすべてのActivityが簡単にVolly要求ネットワークを使用することができます.私はこのように怠け者です.
public RequestQueue mQueue; //
3.権限申請を追加しました.使い方は以下の通りです. // :
requestPermission(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
//...
/**
*
*/
@Override
public void permissionSuccess(int requestCode) {
super.permissionSuccess(requestCode);
switch (requestCode) {
case 1:
// ...
break;
}
}
以下、引用部分:import android.app.ActionBar;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Settings;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.android.volley.RequestQueue; // Volley
import com.android.volley.toolbox.Volley; // Volley
import .BuildConfig;
import .R;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
コード部分/**
* Created by chao on 2016/11/5.
* Activity
* 、MIUI、flyme
* tm
*/
public class BaseActivity extends Activity {
public RequestQueue mQueue; //
public Activity me = this;
protected SystemBarTintManager mTintManager;
private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code";
private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";
private static final String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage";
public static boolean isMIUI() {
try {
final BuildProperties prop = BuildProperties.newInstance();
return prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null || prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null || prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null;
} catch (final IOException e) {
return false;
}
}
public static boolean isFlyme() {
try {
final Method method = Build.class.getMethod("hasSmartBar");
return method != null;
} catch (final Exception e) {
return false;
}
}
// SmartBar
public float getSmartBarHeight(Context context) {
final boolean isMeiZu = Build.MANUFACTURER.equals("Meizu");
final boolean autoHideSmartBar = Settings.System.getInt(context.getContentResolver(),
"mz_smartbar_auto_hide", 0) == 1;
if (isMeiZu) {
if (autoHideSmartBar) {
return 0;
} else {
try {
Class c = Class.forName("com.android.internal.R$dimen");
Object obj = c.newInstance();
Field field = c.getField("mz_action_button_min_height");
int height = Integer.parseInt(field.get(obj).toString());
return context.getResources().getDimensionPixelSize(height) ;
} catch (Throwable e) { // smartbar smartbar , navigationbar
return getNormalNavigationBarHeight(context);
}
}
} else {
return 0;
//return getNormalNavigationBarHeight(context) / metrics.density;
}
}
protected static float getNormalNavigationBarHeight(final Context ctx) {
try {
final Resources res = ctx.getResources();
int rid = res.getIdentifier("config_showNavigationBar", "bool", "android");
if (rid > 0) {
boolean flag = res.getBoolean(rid);
if (flag) {
int resourceId = res.getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
return res.getDimensionPixelSize(resourceId);
}
}
}
} catch (Throwable e) {
return 0;
}
return 0;
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTintManager = new SystemBarTintManager(this);
mQueue = Volley.newRequestQueue(this); //
}
protected void setTranslucentStatus(boolean on, boolean darkmode) {
Log.i("SDK_INT", Build.VERSION.SDK_INT + "");
if (isMIUI()) setStatusBarDarkMode(darkmode, this);
if (isFlyme()) setStatusBarDarkIcon(getWindow(), darkmode);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
window.setNavigationBarColor(Color.BLACK);
if (darkmode)
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
getWindow().setStatusBarColor(Color.TRANSPARENT);
return;
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window win = getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
if (on) {
winParams.flags |= bits;
} else {
winParams.flags &= ~bits;
}
win.setAttributes(winParams);
return;
}
}
public void setStatusBarDarkMode(boolean darkmode, Activity activity) {
Class extends Window> clazz = activity.getWindow().getClass();
try {
int darkModeFlag = 0;
Class> layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");
Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
darkModeFlag = field.getInt(layoutParams);
Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);
extraFlagField.invoke(activity.getWindow(), darkmode ? darkModeFlag : 0, darkModeFlag);
} catch (Exception e) {
e.printStackTrace();
}
}
public static boolean setStatusBarDarkIcon(Window window, boolean dark) {
boolean result = false;
if (window != null) {
try {
WindowManager.LayoutParams lp = window.getAttributes();
Field darkFlag = WindowManager.LayoutParams.class.getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");
Field meizuFlags = WindowManager.LayoutParams.class.getDeclaredField("meizuFlags");
darkFlag.setAccessible(true);
meizuFlags.setAccessible(true);
int bit = darkFlag.getInt(null);
int value = meizuFlags.getInt(lp);
if (dark) {
value |= bit;
} else {
value &= ~bit;
}
meizuFlags.setInt(lp, value);
window.setAttributes(lp);
result = true;
} catch (Exception e) {
Log.e("MeiZu", "setStatusBarDarkIcon: failed");
}
}
return result;
}
// NavigationBar
public boolean checkDeviceHasNavigationBar() {
if (getWindowManager().getDefaultDisplay().getHeight() < (getWindowManager().getDefaultDisplay().getWidth() * 16 / 9) - 20) {
return true;
} else {
return false;
}
}
public static class BuildProperties {
private final Properties properties;
private BuildProperties() throws IOException {
properties = new Properties();
properties.load(new FileInputStream(new File(Environment.getRootDirectory(), "build.prop")));
}
public boolean containsKey(final Object key) {
return properties.containsKey(key);
}
public boolean containsValue(final Object value) {
return properties.containsValue(value);
}
public Set> entrySet() {
return properties.entrySet();
}
public String getProperty(final String name) {
return properties.getProperty(name);
}
public String getProperty(final String name, final String defaultValue) {
return properties.getProperty(name, defaultValue);
}
public boolean isEmpty() {
return properties.isEmpty();
}
public Enumeration