AppCompat-v7이 포함 된 도구 모음 및 상황 별 작업 모음


182

Lollipop과 AppCompat-v7 라이브러리에 도입 된 새로 추가 된 툴바를 사용하고 있습니다. 나는 다음 이 가이드 도구 모음 내가 눈치 설정에를 그이 페이지의 아래 도구 모음을 밀어 것 (예 : 붙여 넣기 / 복사 텍스트를 강조 같은) 상황에 맞는 액션 바을 가져올 것이다 때 뭔가 호출. 페이지 하단의 이미지에서 내가 말하는 것을 볼 수 있습니다.

본질적으로, 나는 이것을 이렇게 설정했습니다. include 태그와 함께 사용하는 xml 파일에 툴바가 정의되어 있습니다.

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"/>

그런 다음 내 관점에서 인스턴스화합니다.

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/root"
    tools:context=".MainActivity">

    <include
        layout="@layout/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/> 

    <!-- Rest of view -->

    </LinearLayout>

코드에서는 다음과 같이 설정했습니다.

    // On Create method of activity:
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

Contextual ActionBar가 툴바 위에 오도록하는 방법을 아는 사람이 있습니까?

툴바 및 상황 별 액션 바


활동에서 어떤 주제를 사용하고 있습니까?
alanv

데이빗, 방금 링크를 클릭했는데 저에게 도움이되는 것 같습니다.
ariets

답변:


320

최신 정보:

솔루션 : windowActionModeOverlay 특성을 사용하십시오 . 이것을 테마로 설정하십시오.

<item name="windowActionModeOverlay">true</item>

액션 모드는 액션 바를 아래로 밀지 않고 표시됩니다. 최신 AppCompat을 사용하지 않는 경우 속성에 "android :"접두사를 추가해야합니다. 기본적으로 AppCompat은 화면 상단에 도구 모음이 있으며 그 위에 ActionMode를 그려야 함을 알립니다.


이전 답변 / 해결 방법 :

나는 같은 문제에 부딪쳤다. 어떤 테마를 설정하든 ActionBar로 설정 한 툴바는 항상 아래로 내려갑니다. 지원 라이브러리를 사용하거나 사용하지 않고 시도했지만 중요하지 않았습니다.

불행히도 나는 그것을 고칠 수 없어서 대안을 만들었습니다. 내에서 ActionModeCallbackonCreateActionMode내가 작업 표시 줄을 숨길 수 :

actionBarToolbar.setVisibility(View.GONE);

그리고 onDestroyActionMode나는 그것을 다시 보여줍니다 :

actionBarToolbar.setVisibility(View.VISIBLE);

숨기 / 보여주기가 너무 빨라서 테스트 장치에서 눈에 띄지 않습니다. 물론 단점이 있습니다. 엔터테인먼트 애니메이션은 여전히 ​​작동하지만 상황에 맞는 액션 바의 출구 애니메이션은 툴바가 즉시 팝업되기 때문에 사라집니다. 그러나 우리가 더 나은 솔루션을 발견 할 때까지 우리는 이것에 붙어 있다고 생각합니다.


(내 활동은 실제로 Google I / O 2014 앱 소스 코드 에서 가져온 BaseActivity라는 메소드가 있는 사용자 정의 클래스를 확장 하므로 툴바를 쉽게 가져올 수 있습니다.getActionBarToolbar()

BaseActivity activity = (BaseActivity) getActivity();
activity.getActionBarToolbar().setVisibility(View.GONE);

I / O 앱이 상황 별 작업 표시 줄을 사용하지 않는 것이 너무 나쁩니다.)


그래, 이것이 내가 올 수있는 유일한 해결책이었다. 그러나 상황에 맞는 ActionBar가 시스템에서 발생하는 경우가 있습니다 (예 : WebView 또는 EditText 사용). 콜백을받지 못한 사람들. 그렇다면 어떻게 표시하거나 숨길 수 있습니까? (또는 내가 틀렸고 실제로 CAB에 대한 콜백을 얻을 수 있습니까?)
ariets

1
예, Aleksandar의 답변에 설명 된 것처럼 TextView.setCustomSelectionActionModeCallback () 을 사용할 수 있습니다 .
Jacob Ras

1
아, 이미 내 의견을 더 이상 업데이트 할 수 없습니다. 작은 추가 : setCustomSelectionActionModeCallback을 지원 라이브러리의 ActionModeCallback과 함께 사용할 수없는 것 같습니다. VERSION.SDK_INT 확인을 사용하여 설정하고 있습니다. 허니컴 이전 장치에서도 문제가 발생하는지 테스트해야합니다.
Jacob Ras

@ariets 내 업데이트 된 답변을 참조하십시오. 나는 그 속성을 완전히 잊어 버린 것에 대해 약간의 덤프를 느낀다. 그러나 적어도 우리는 지금 해결 방법을 제거 할 수있다 ;-)
Jacob Ras

1
웃긴 나는 최신 (컴파일 'com.android.support:appcompat-v7:22.0.0')을 사용하고 있지만 안드로이드를 떠나야합니다 : 작동하는 부분 ...
Warpzit

16

활동에서 시작하지 말고 도구 모음에서 시작하십시오. 당신의 활동에서 :

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.startActionMode(mActionModeCallback)

그리고 당신은 사용해야합니다

<item name="windowActionModeOverlay">true</item>

나를 위해 그것은 android.support.v7.app.ActionBar를 위해 않습니다
Frank

View 에서이 오류-> startActionMode (android.view.ActionMode.Callback)를 적용 할 수 없습니다 (android.support.v7.view.ActionMode.Callback)
Faheem

아 알았어 내 최소 버전은 11보다 작지 않으므로 android.view.ActionMode를 사용할 수 있습니다. android.support.v7.widget.Toolbar의 콜백, 나는 android.support.v7.view.ActionMode.Callback을 사용하지 않았습니다.
Frank

메뉴 항목 xml AppCompatActivity.startSupportActionMode(callback)과 같은 속성과의 호환성을 얻으려면을 언급 할 가치가 app:iconTint있습니다.
geekley

14

작은 추가 :

<item name="windowActionModeOverlay">true</item>
활동하려면 활동 super.onCreate(savedInstanceState) 전에 전화 하기 전에 전화하는 것이 중요합니다 setContentView(R.layout.your_activity). 이 경우 실제로 차이를 만듭니다!


11

내 경우에는 <item name="windowActionModeOverlay">true</item>작동하지 않았다,하지만이 작품은 : <item name="android:windowActionModeOverlay">true</item>는이 android핵심입니다.


8
<item name="windowActionModeOverlay">true</item>appcompat 도구 모음과 함께 사용 하고, 그렇지 않으면 android네임 스페이스 를 사용합니다 .
Javier Mendonça 2016 년

내 레이아웃에서 툴바를 추가하고 있지 않습니다. 활동 초기화 툴바에서 setsupport true done 나를 도와주세요
Harsha

<item name = "windowActionModeOverlay"> true </ item>이 예상대로 작동했습니다!
Francois

8

Jacob의 솔루션은 저에게 효과적이지만 상황에 맞는 ActionBar는 투명하고 툴바는 볼 수 있습니다. 이것은 다음과 같이 해결 될 수 있습니다.

<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
    ....
    ....
    <item name="actionModeStyle">@style/CustomActionMode</item>
</style>

<style name="CustomActionMode" parent="@style/Widget.AppCompat.ActionMode">
    <item name="background">@color/primary_material_light</item>
</style>

테마 "AppTheme.Base"는 툴바에 적용된 테마 여야합니다.

상황에 맞는 ActionBar 스타일링에 대한 자세한 내용 :

재료 설계에서 appCompat를 사용하여 상황 별 작업 표시 줄을 사용자 정의하는 방법


0

툴바를 앞으로 가져 오는 매우 유용한 방법 toolbar.bringToFront()


2
View.bringToFront()매우 무거운 작업이며 일반적으로 어떤 비용으로도 피해야합니다.
dominus

당신은 맞지만, 예를 들어 화면 상단에서 하단의 애니메이션은 툴바와 겹칩니다. ) : 그러므로 우리는 당신이 공유 할 수있는 다른 방법이 toolbar.If 아래 애니메이션에 toolbar.bringToFront ()를 사용합니다
kunal.c가

0

또 다른 작은 추가 사항 : setContentView(R.layout.empty_screen)전체 UI를 조각 ( ft.replace(android.R.id.content, fragment))으로 로드하는 경우를 통해 활동에서 빈 화면을 설정하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.