2016-10-13 1 views
1

Nougat의 새로운 다중 창 모드를 사용하는 동안 내 앱이 세로 모드의 상단 창에있는 경우 Toast이 다른 앱 위에 표시됩니다.노가트의 멀티 윈도우 모드에서 토스트를 배치하는 방법은 무엇입니까?

enter image description here

이 좋지 전혀 ...입니다. 그래서 나는 내 Toast 다음에 this answer에서 까지 안드로이드에서 토스트의 위치를 ​​변경하는 방법을 시도했다.

toast.setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0); 

는 불행하게도 Gravity하지 "중력 내 창" "화면에 대한 중력"로 해석 될 것으로 보인다.

어떻게 내 창 하단 근처 어딘가에 표시되는 Toast 얻기 위해 수평 중심? xoffset이, yOffset : 매개 변수

enter image description here

답변

2

이것은 의도 한 행동으로 생각됩니다. 그 너머 욕망을 달성하기위한 직접적인 방법이 없습니다. Material Design Guidelines 토스트는 주로 시스템 메시지를 전달하는 데 사용되며 화면 하단에 나타납니다.

내 생각 엔 시스템 메시지는 전체 장치에 관련된, 반드시 응용 프로그램에 국한되지 않는, 그래서이 일관된 동작 말이해야 할 것이다. 즉, 토스트가 응용 프로그램 중 하나에서 화면의 실제 25 %를 차지하기 때문에이 동작이 바람직하지 않은 이유를 알 수 있습니다. 그러나 토스트의 위치에 관계없이 화면에서 실제 화면을 볼 수 있습니다. 귀하의 신청서 또는 아래의 신청서에 상관없이

해결 방법을 실제로 구현하려는 경우 토스트를 세로로 오프셋하기위한 구현이 있습니다. 경미한 변화는 조경 모드를 달성해야하지만, 조금 더 finnicky입니다. 응답뿐만와

View root = findViewById(R.id.root_main); 

int[] xy = new int[2]; 
root.getLocationOnScreen(xy); 

DisplayMetrics displayMetrics = new DisplayMetrics(); 
WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE); 
wm.getDefaultDisplay().getMetrics(displayMetrics); 
int devHeight = displayMetrics.heightPixels; 

int viewHeight = root.getHeight(); 

Toast toast = Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_LONG); 
int yOffset = Math.abs(xy[1] - devHeight + viewHeight) + toast.getYOffset(); 
toast.setGravity(Gravity.BOTTOM, 0, yOffset); 
toast.show(); 
+0

답해 주셔서 감사합니다. 토스트는 [Toast 개발자 가이드] (https://developer.android.com/guide/topics/ui/notifiers/toasts)의 예와 같이 작은 메시지에 대해서는 모든 앱에서 사용할 수 있습니다. .html)는 말한다. 토스트가 시스템 메시지만을위한 것이라는 합의가 이루어 졌다면 내 토스트를 사용자 정의하는 방법을 왜 설명합니까? 나는 "Game Over"나 "Playlist에 10 곡 추가"와 같은 것들을 위해 사용합니다. – 0X0nosugar

+0

(계속) 표준 토스트를 사용하고 사용자가 어떤 앱에서 메시지가 왔는지조차 알 수 없다면 정말 위험합니다 (심지어 위험합니다). 물론 다른 앱의 영역을 다루고 싶지는 않습니다. – 0X0nosugar

+0

해결 방법 : 코드를 표시 할 수 있습니까? 질문에서 내 작은 샘플 응용 프로그램으로 이것을 테스트하고 싶습니다. – 0X0nosugar

0

사용 setGravity 방법.

Toast toast= Toast.makeText(getApplicationContext(),"Message Toast", Toast.LENGTH_SHORT); 
toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0); 
toast.show(); 
+0

감사'(가)'Toast'이 풍경 전체 화면의 중앙에 표시되며,이는 적어도 부분적으로 내 두 번째 사진의 다른 응용 프로그램 위에 표시 의미 Gravity.CENTER_HORIZONTAL'. Gravity.TOP 반면 내 애플 리케이션이 세로 및 낮은 창에 문제가 발생할 것입니다. 제가 말했던 것처럼 : 중력은 창 전체가 아니라 전체 화면과 관련이 있습니다. – 0X0nosugar

관련 문제