Android 에서 Toast 의 사용자 정의 사용 공유
낡은 규칙,우 리 는 먼저 Toast 의 소스 코드 를 보 러 간다.
Toast 는 두 가지 디 스 플레이 레이아웃 방식 이 있 는데 하 나 는
Toast.makeText()
을 가장 자주 호출 하 는 것 입 니 다.소스 코드 를 보면 이렇게 쓰 여 있 습 니 다.
public static Toast makeText(Context context, CharSequence text, @Duration int duration) {
Toast result = new Toast(context);
LayoutInflater inflate = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflate.inflate(com.android.internal.R.layout.transient_notification, null);
TextView tv = (TextView)v.findViewById(com.android.internal.R.id.message);
tv.setText(text);
result.mNextView = v;
result.mDuration = duration;
return result;
}
transient_notification 이 레이아웃 파일 코드 는 이 렇 습 니 다.
<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="?android:attr/toastFrameBackground">
<TextView
android:id="@android:id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_horizontal"
android:textAppearance="@style/TextAppearance.Toast"
android:textColor="@color/bright_foreground_dark"
android:shadowColor="#BB000000"
android:shadowRadius="2.75"
/>
</LinearLayout>
그러면 Toast 의 문자 메시지 스타일 을 수정 하려 고 합 니 다.사실은 Toast 루트 레이아웃 과 message 라 는 TextView 를 수정 하 는 것 입 니 다.Toast 의 또 다른 디 스 플레이 모드 는 사용자 정의 레이아웃 디 스 플레이 입 니 다.이 방법 은
Toast.makeText()
방법 을 사용 하지 않 고 new Toast 대상 을 사용 한 다음 에 setView()
방법 을 사용 합 니 다.물론 사용자 정의 레이아웃 은 transient_notification
레이아웃 을 불 러 오지 않 습 니 다.2.사용자 정의 Toast 구현
제 가 봉 인 된 공구 류 ToastUtil 을 먼저 보 여 드 리 겠 습 니 다.
import android.content.Context;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
/**
* Created by on 2016/8/11.
*/
public class ToastUtil {
private Toast toast;
private LinearLayout toastView;
/**
* Toast
*/
public ToastUtil() {
}
/**
* Toast
* @param context
* @param view
*/
public ToastUtil(Context context, View view,int duration){
toast=new Toast(context);
toast.setView(view);
toast.setDuration(duration);
}
/**
* Toast view
* @param view
* @param postion
* @return
*/
public ToastUtil addView(View view,int postion) {
toastView = (LinearLayout) toast.getView();
toastView.addView(view, postion);
return this;
}
/**
* Toast
* @param messageColor
* @param backgroundColor
* @return
*/
public ToastUtil setToastColor(int messageColor, int backgroundColor) {
View view = toast.getView();
if(view!=null){
TextView message=((TextView) view.findViewById(android.R.id.message));
message.setBackgroundColor(backgroundColor);
message.setTextColor(messageColor);
}
return this;
}
/**
* Toast
* @param messageColor
* @param background
* @return
*/
public ToastUtil setToastBackground(int messageColor, int background) {
View view = toast.getView();
if(view!=null){
TextView message=((TextView) view.findViewById(android.R.id.message));
message.setBackgroundResource(background);
message.setTextColor(messageColor);
}
return this;
}
/**
* Toast
*/
public ToastUtil Short(Context context, CharSequence message){
if(toast==null||(toastView!=null&&toastView.getChildCount()>1)){
toast= Toast.makeText(context, message, Toast.LENGTH_SHORT);
toastView=null;
}else{
toast.setText(message);
toast.setDuration(Toast.LENGTH_SHORT);
}
return this;
}
/**
* Toast
*/
public ToastUtil Short(Context context, int message) {
if(toast==null||(toastView!=null&&toastView.getChildCount()>1)){
toast= Toast.makeText(context, message, Toast.LENGTH_SHORT);
toastView=null;
}else{
toast.setText(message);
toast.setDuration(Toast.LENGTH_SHORT);
}
return this;
}
/**
* Toast
*/
public ToastUtil Long(Context context, CharSequence message){
if(toast==null||(toastView!=null&&toastView.getChildCount()>1)){
toast= Toast.makeText(context, message, Toast.LENGTH_LONG);
toastView=null;
}else{
toast.setText(message);
toast.setDuration(Toast.LENGTH_LONG);
}
return this;
}
/**
* Toast
*
* @param context
* @param message
*/
public ToastUtil Long(Context context, int message) {
if(toast==null||(toastView!=null&&toastView.getChildCount()>1)){
toast= Toast.makeText(context, message, Toast.LENGTH_LONG);
toastView=null;
}else{
toast.setText(message);
toast.setDuration(Toast.LENGTH_LONG);
}
return this;
}
/**
* Toast
*
* @param context
* @param message
* @param duration
*/
public ToastUtil Indefinite(Context context, CharSequence message, int duration) {
if(toast==null||(toastView!=null&&toastView.getChildCount()>1)){
toast= Toast.makeText(context, message,duration);
toastView=null;
}else{
toast.setText(message);
toast.setDuration(duration);
}
return this;
}
/**
* Toast
*
* @param context
* @param message
* @param duration
*/
public ToastUtil Indefinite(Context context, int message, int duration) {
if(toast==null||(toastView!=null&&toastView.getChildCount()>1)){
toast= Toast.makeText(context, message,duration);
toastView=null;
}else{
toast.setText(message);
toast.setDuration(duration);
}
return this;
}
/**
* Toast
* @return
*/
public ToastUtil show (){
toast.show();
return this;
}
/**
* Toast
* @return
*/
public Toast getToast(){
return toast;
}
}
Toast 배경 색 의 사용법 은 다음 과 같 습 니 다.
ToastUtil toastUtil=new ToastUtil();
toastUtil.Short(MainActivity.this," message 、 ").setToastColor(Color.WHITE, getResources().getColor(R.color.colorAccent)).show();
Toast 배경 색 수정
사각형 의 Toast 가 약간 딱딱 해 보 여서 저 는 toast 라 는 이름 을 정 의 했 습 니 다.radius.xml 배경,코드 는 다음 과 같 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- -->
<solid android:color="#ffc107" />
<!-- android:radius -->
<corners android:radius="20dip" />
</shape>
그리고 위 에 배경 을 설정 한 코드 를 다음 과 같이 바 꿉 니 다.
toastUtil.Short(MainActivity.this," message ").setToastBackground(Color.WHITE,R.drawable.toast_radius).show();
배경 을 수정 한 Toast
공식 적 으로 Toast 와 Snackbar 는 모두 짧 은 텍스트 형식 이 어야 하 며 아이콘 을 포함 할 수 없다 고 생각 하지만 개인 적 으로 아이콘 을 추가 하 는 것 이 재 미 있 을 것 같 습 니 다.
Toast 에 아이콘 을 추가 하면 다음 과 같 습 니 다:
ImageView toastImage = new ImageView(getApplicationContext());
toastImage.setImageResource(R.mipmap.ic_launcher);
toastUtil.Short(MainActivity.this," Toast ImageView").setToastBackground(Color.WHITE,R.drawable.toast_radius).addView(toastImage,0).show();
아이콘 추가 Toast
Toast 에서 사용자 정의 레이아웃 을 표시 하려 면 다음 과 같이 할 수 있 습 니 다.
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.image,null);
new ToastUtil(MainActivity.this,view,Toast.LENGTH_SHORT).show();
사용자 정의 레이아웃 Toast,내 레이아웃 파일 에 기본 아이콘 만 있 는 ImageView
Toast 의
show()
방법 을 연속적으로 터치 할 때 Toast 는 줄 을 서서 연속적으로 보 여 주 며 그다지 우호 적 이지 않다 는 것 을 잘 알 고 있다.그래서 저 는 먼저 toast 가 만 들 지 않 았 거나 추가 view 가 추가 되 었 는 지 판단 하 였 습 니 다.그렇다면 toast 대상 을 다시 만 듭 니 다.그렇지 않 으 면 message 문자 와 표시 시간 만 수정 합 니 다.Toast 레이아웃 수정,대기 열 표시 하지 않 음
총결산
나의 이 공구 류 는 완전 체 가 아니 므 로,여러분 은 다시 자신의 프로젝트 의 구체 적 인 수요 에 따라 수정 하 세 요.이상 은 안 드 로 이 드 에서 Toast 의 플 라 워 가 사용 하 는 모든 내용 입 니 다.관심 있 는 친구 들 은 빨리 스스로 실천 하 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.