Android 진급의 길 - 자주 사용하는 작은 기능
기우편
두 번 되돌아오기, 응용 프로그램 종료
/**
*
*/
long exitTime = 0;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
if ((System.currentTimeMillis() - exitTime) > 2000) {
toast(" ");
exitTime = System.currentTimeMillis();
} else {
finish();
System.exit(0);
}
return true;
}
return super.onKeyDown(keyCode, event);
}
컨텐트 복사, 붙여넣기
//
// -
ClipboardManager cbm=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
cbm.setText(" ");
// -
ClipboardManager cbm=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
edit1.setText(cbm.getText());
화면 너비 가져오기
/**
*
* */
public static int getScreenWith(Context context) {
WindowManager manager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
return display.getWidth();
}
/**
*
* */
public static int getScreenHeight(Context context) {
WindowManager manager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
return display.getHeight();
}
소프트 키보드 높이 가져오기
et.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener(){
// 。
@Override
public void onGlobalLayout() {
Rect r = new Rect();
//
MainActivity.this.getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
//
int screenHeight = MainActivity.this.getWindow().getDecorView().getRootView().getHeight();
// , 0
int heightDifference = screenHeight - r.bottom;
Log.d("Keyboard Size", "Size: " + heightDifference);
}
});
자동 플로피 키보드 팝업
/**
* , , ~
*/
private void showKeyboard(){
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(editText, 0);
}
소프트 키보드 숨기기
방법 1:
/**
*
*/
void hintKeyboard() {
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (inputMethodManager.isActive()) {
inputMethodManager.hideSoftInputFromWindow(MainActivity.this.getCurrentFocus().getWindowToken(), 0);
}
}
방법 2:
/**
* des: , activity
*/
public static void hideInputForce(Activity activity) {
if (activity == null || activity.getCurrentFocus() == null) {
return;
}
InputMethodManager imm = (InputMethodManager) activity.getSystemService(INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
소프트 키보드 상태 수신(팝업 롤백)
안드로이드에서 개발한 감청 소프트 키보드 상태(팝업 회수)
package
/**
* @author MrLiu
* @date 2019/9/12
* desc
*/
import android.app.Activity;
import android.graphics.Rect;
import android.util.Log;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.FrameLayout;
public class KeyboardStateObserver {
private static final String TAG = KeyboardStateObserver.class.getSimpleName();
public static KeyboardStateObserver getKeyboardStateObserver(Activity activity) {
return new KeyboardStateObserver(activity);
}
private View mChildOfContent;
private int usableHeightPrevious;
private OnKeyboardVisibilityListener listener;
public void setKeyboardVisibilityListener(OnKeyboardVisibilityListener listener) {
this.listener = listener;
}
private KeyboardStateObserver(Activity activity) {
FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);
mChildOfContent = content.getChildAt(0);
mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout() {
possiblyResizeChildOfContent();
}
});
}
private void possiblyResizeChildOfContent() {
int usableHeightNow = computeUsableHeight();
if (usableHeightNow != usableHeightPrevious) {
int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();
int heightDifference = usableHeightSansKeyboard - usableHeightNow;
if (heightDifference > (usableHeightSansKeyboard / 4)) {
if (listener != null) {
listener.onKeyboardShow();
}
} else {
if (listener != null) {
listener.onKeyboardHide();
}
}
usableHeightPrevious = usableHeightNow;
Log.d(TAG,"usableHeightNow: " + usableHeightNow + " | usableHeightSansKeyboard:" + usableHeightSansKeyboard + " | heightDifference:" + heightDifference);
}
}
private int computeUsableHeight() {
Rect r = new Rect();
mChildOfContent.getWindowVisibleDisplayFrame(r);
Log.d(TAG,"rec bottom>" + r.bottom + " | rec top>" + r.top);
return (r.bottom - r.top);// : return r.bottom
}
public interface OnKeyboardVisibilityListener {
void onKeyboardShow();
void onKeyboardHide();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
KeyboardStateObserver.getKeyboardStateObserver(this).
setKeyboardVisibilityListener(new KeyboardStateObserver.OnKeyboardVisibilityListener() {
@Override
public void onKeyboardShow() {
Toast.makeText(MainActivity.this," ",Toast.LENGTH_SHORT).show();
}
@Override
public void onKeyboardHide() {
Toast.makeText(MainActivity.this," ",Toast.LENGTH_SHORT).show();
}
});
}
폭력 방지 클릭 방법
/**
*
* lastClickTime = 0
*/
public static Boolean noDoubleClick() {
long currentTimeMillis = System.currentTimeMillis();
if (currentTimeMillis - lastClickTime > 300) {
lastClickTime = currentTimeMillis;
//
return true;
}
return false;
}
폭력 방지 클릭 방법(스스로 클릭 간격을 설정)
/**
*
* @param spaceTime (ms)
* lastClickTime = 0
*/
public static Boolean noDoubleClick(long spaceTime) {
long currentTimeMillis = System.currentTimeMillis();
if (currentTimeMillis - lastClickTime > spaceTime) {
lastClickTime = currentTimeMillis;
//
return true;
}
return false;
}
입력한 소문자가 자동으로 대문자로 변환됨
public class A2AChange extends ReplacementTransformationMethod {
@Override
protected char[] getOriginal() {
char[] aa = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' };
return aa;
}
@Override
protected char[] getReplacement() {
char[] cc = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' };
return cc;
}
}
사용 방법
textView.setTransformationMethod(new A2AChange());
진동 애니메이션
private void setMsgAnimator() {
ObjectAnimator a = ObjectAnimator.ofFloat(rlMsgCenter, "translationX", 0, 10);
a.setInterpolator(new LinearInterpolator());
a.setDuration(40);
a.setRepeatCount(20);
a.setRepeatMode(ObjectAnimator.REVERSE);
a.start();
}
Layout 외부 여백 설정
public void margin(View v, int l, int t, int r, int b) {
if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
p.setMargins(l, t, r, b);
v.requestLayout();
}
}
같은 컨트롤 아래 서로 다른 텍스트의 디스플레이 효과 설정하기(html 방법)
//
Html.fromHtml(" " + "" + " ( )" + "")
// ( , ~)
mContext.setText(Html.fromHtml(" " + "" + " " + ""));
//
현재 프로젝트의 그림의 구체적인 저장 위치를 가져옵니다
/**R.mipmap.ic_status_add */
String resourcePackageName = getResources().getResourcePackageName(R.mipmap.ic_status_add);
String resourceTypeName = getResources().getResourceTypeName(R.mipmap.ic_status_add);
String resourceEntryName = getResources().getResourceEntryName(R.mipmap.ic_status_add);
String urlPhoto = resourcePackageName + "/" + resourceTypeName + "/" + resourceEntryName;
핸드폰에 위챗, QQ, 알리페이, 웨이보를 설치했는지 검사하다
public class JudgeApplicationIsExistUtils {
/**
*
*/
public static boolean isWeixinAvilible(Context context) {
final PackageManager packageManager = context.getPackageManager();// packagemanager
List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);//
if (pinfo != null) {
for (int i = 0; i < pinfo.size(); i++) {
String pn = pinfo.get(i).packageName;
if (pn.equals("com.tencent.mm")) {
return true;
}
}
}
return false;
}
/**
* S7
*/
private static IWXAPI api; // , SDK
public static boolean isWeChatAppInstalled(Context context) {
api = WXAPIFactory.createWXAPI(context, "Your WeChat AppId");
if (api.isWXAppInstalled() && api.isWXAppSupportAPI()) {
return true;
} else {
final PackageManager packageManager = context.getPackageManager();// packagemanager
List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);//
if (pinfo != null) {
for (int i = 0; i < pinfo.size(); i++) {
String pn = pinfo.get(i).packageName;
if (pn.equalsIgnoreCase("com.tencent.mm")) {
return true;
}
}
}
return false;
}
}
/**
*
*
* @param context
* @return
*/
public static boolean isAliPayInstalled(Context context) {
Uri uri = Uri.parse("alipays://platformapi/startApp");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
ComponentName componentName = intent.resolveActivity(context.getPackageManager());
return componentName != null;
}
/**
* qq
*/
public static boolean isQQClientAvailable(Context context) {
final PackageManager packageManager = context.getPackageManager();
List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);
if (pinfo != null) {
for (int i = 0; i < pinfo.size(); i++) {
String pn = pinfo.get(i).packageName;
if (pn.equals("com.tencent.mobileqq")) {
return true;
}
}
}
return false;
}
/**
*
*/
public static boolean isWeiboIAvilible(Context context) {
PackageManager pm;
if ((pm = context.getApplicationContext().getPackageManager()) == null) {
return false;
}
List<PackageInfo> packages = pm.getInstalledPackages(0);
for (PackageInfo info : packages) {
String name = info.packageName.toLowerCase(Locale.ENGLISH);
if ("com.sina.weibo".equals(name)) {
return true;
}
}
return false;
}
}
사용 방법
if (JudgeApplicationIsExistUtils.isQQClientAvailable(LoginActivity.this)){
// ,
}else {
Toast.makeText(LoginActivity.this," QQ!",Toast.LENGTH_SHORT).show();
}
깨우다
깨우기에 실패하면, 여기 제 8조를 보십시오--~
PackageManager packageManager = getPackageManager();
Intent intent=new Intent();
//pageage Name !
intent = packageManager.getLaunchIntentForPackage("package Name");
startActivity(intent);
특수 장면: 현재 핸드폰에 우리가 깨울 앱이 없으면
Intent view = new Intent ("android.intent.action.VIEW",Uri.parse(" "));
startActivity(viewIntent);
주의:uri가 움직일 때, 액션 설정과category 설정이 없어서는 안 됩니다.category 설정이 고정되어 있음;아래와 같다
<category android:name="android.intent.category.DEFAULT" />
URL을 통해 대응하는 삼자 app 메인 부품을 전환(내 사용 장면: 웹뷰 삼자 결제 시 로컬 app 불러일으키기)
//loadurl : url
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(loadUrl));
startActivity(intent);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.