8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
详细说明参见public class AutoUtils {
private static int displayWidth;
private static int displayHeight;
private static int designWidth;
private static int designHeight;
private static double textPixelsRate;
public static void setSize(Context act, boolean hasStatusBar, int designWidth, int designHeight) {
if (act == null || designWidth < 1 || designHeight < 1) return;
WindowManager wm = (WindowManager) act.getSystemService(Context.WINDOW_SERVICE);
int width = wm.getDefaultDisplay().getWidth();
int height = wm.getDefaultDisplay().getHeight();
if (hasStatusBar) {
height -= getStatusBarHeight(act);
}
AutoUtils.displayWidth = width;
AutoUtils.displayHeight = height;
AutoUtils.designWidth = designWidth;
AutoUtils.designHeight = designHeight;
double displayDiagonal = Math.sqrt(Math.pow(AutoUtils.displayWidth, 2) + Math.pow(AutoUtils.displayHeight, 2));
double designDiagonal = Math.sqrt(Math.pow(AutoUtils.designWidth, 2) + Math.pow(AutoUtils.designHeight, 2));
AutoUtils.textPixelsRate = displayDiagonal / designDiagonal;
}
public static int getStatusBarHeight(Context context) {
int result = 0;
try {
int resourceId = context.getResources().getIdentifier(
"status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = context.getResources().getDimensionPixelSize(
resourceId);
}
} catch (Resources.NotFoundException e) {
e.printStackTrace();
}
return result;
}
public static void auto(Activity act) {
if (act == null || displayWidth < 1 || displayHeight < 1) return;
View view = act.getWindow().getDecorView();
auto(view);
}
public static void auto(View view) {
if (view == null || displayWidth < 1 || displayHeight < 1) return;
AutoUtils.autoTextSize(view);
AutoUtils.autoSize(view);
AutoUtils.autoPadding(view);
AutoUtils.autoMargin(view);
if (view instanceof ViewGroup) {
auto((ViewGroup) view);
}
}
private static void auto(ViewGroup viewGroup) {
int count = viewGroup.getChildCount();
for (int i = 0; i < count; i++) {
View child = viewGroup.getChildAt(i);
if (child != null) {
auto(child);
}
}
}
public static void autoMargin(View view) {
if (!(view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams))
return;
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
if (lp == null) return;
lp.leftMargin = getDisplayWidthValue(lp.leftMargin);
lp.topMargin = getDisplayHeightValue(lp.topMargin);
lp.rightMargin = getDisplayWidthValue(lp.rightMargin);
lp.bottomMargin = getDisplayHeightValue(lp.bottomMargin);
}
public static void autoPadding(View view) {
int l = view.getPaddingLeft();
int t = view.getPaddingTop();
int r = view.getPaddingRight();
int b = view.getPaddingBottom();
l = getDisplayWidthValue(l);
t = getDisplayHeightValue(t);
r = getDisplayWidthValue(r);
b = getDisplayHeightValue(b);
view.setPadding(l, t, r, b);
}
public static void autoSize(View view) {
ViewGroup.LayoutParams lp = view.getLayoutParams();
if (lp == null) return;
if (lp.width > 0) {
lp.width = getDisplayWidthValue(lp.width);
}
if (lp.height > 0) {
lp.height = getDisplayHeightValue(lp.height);
}
}
public static void autoTextSize(View view) {
if (view instanceof TextView) {
double designPixels = ((TextView) view).getTextSize();
double displayPixels = textPixelsRate * designPixels;
((TextView) view).setIncludeFontPadding(false);
((TextView) view).setTextSize(TypedValue.COMPLEX_UNIT_PX, (float) displayPixels);
}
}
public static int getDisplayWidthValue(int designWidthValue) {
if (designWidthValue < 2) {
return designWidthValue;
}
return designWidthValue * displayWidth / designWidth;
}
public static int getDisplayHeightValue(int designHeightValue) {
if (designHeightValue < 2) {
return designHeightValue;
}
return designHeightValue * displayHeight / designHeight;
}
}
初始化尺寸public class BaseApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Log.e("Tag", "初始化设置");
AutoUtils.setSize(this, true, 1080, 1920);
}
}如果有横竖屏切换,可以再次设置,不过需要在销毁的时候重置回来。
页面绑定public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(initView());
AutoUtils.auto(this);
initEvent();
}
protected abstract int initView();
protected abstract void initEvent();
}对于不是activity的可以使用 AutoUtils.auto(view);比如用在fragment中,用在recycleView,ListView等列表中在布局使用px即可