AppCompatActivity 사용

8845 단어 android
  • 지원 패키지가 22.1로 업데이트되면 안드로이드 스튜디오 프로젝트의Activity는 기본적으로 이 클래스를 계승합니다.
  • ActionBarActivity가 ActionBarActivity
  • 를 대체했습니다.
    이것은 이름의 변화만이 아니라 내부 실현 원리는 사실 AppCompatDelegate를 통해 이루어진 것이다.AppCompatDelegate는 임의의Activity에 넣고 해당 라이프 사이클을 리셋할 수 있는 클래스입니다.
  • 의 계승과 실현
  • public class AppCompatActivity extends FragmentActivity implements AppCompatCallback,
            TaskStackBuilder.SupportParentable, ActionBarDrawerToggle.DelegateProvider{
            ...
     }
  • Fragment Activty를 계승하여 설명이 많지 않다.
  • AppCompatCallback, 이 appcompat가 일정한 상황에서 리셋될 수 있도록 합니다.사실 이것은 AppCompatDelegate를 만드는 것이고, AppCompatDelegate는 에이전트에 해당하며, 모든Activity 대상에게 AppCompatActivity의 특성을 제공할 수 있다.
  • TaskStackBuilder.SupportParentable, TaskStackBuilder는 여러 작업을 탐색하는 데 사용되는 프로그램 클래스입니다.일반 탐색:
    이 때, 새로운 작업을 시작하기 위해 Intent를 만들고, 프로그램의 정상적인 반환 행위를 다시 시작하기 위해 백스테이크를 제공해야 합니다.
    특수 탐색:
    알림 표시줄에서 활동이 열리고 사용자는 보조 활동만 볼 수 있습니다.어떤 의미에서 보면 이 이벤트를 여는 목적은 알림에 표시하기 어려운 정보를 보여주는 것이다.이 경우 Back stack을 만들 필요 없이 Intent를 생성하여 새 작업을 시작합니다.시작된 활동이 응용 프로그램 활동 흐름의 일부가 아니기 때문이다.리트랙트 키를 누르면 사용자를 홈 화면으로 직접 돌려보냅니다.
    Pending Intent에 대해 말씀드렸습니다. 맞아요. SupportParentable을 실현하면 Pending Intent
    public interface SupportParentable {
        Intent getSupportParentActivityIntent();
    }
    
    public TaskStackBuilder addParentStack(Activity sourceActivity) {
        Intent parent = null;
        if (sourceActivity instanceof SupportParentable) {
            parent = ((SupportParentable) sourceActivity).getSupportParentActivityIntent();
        }
        if (parent == null) {
            parent = NavUtils.getParentActivityIntent(sourceActivity);
        }
    
        if (parent != null) {
            // We have the actual parent intent, build the rest from static metadata
            // then add the direct parent intent to the end.
            ComponentName target = parent.getComponent();
            if (target == null) {
                target = parent.resolveActivity(mSourceContext.getPackageManager());
            }
            addParentStack(target);
            addNextIntent(parent);
        }
        return this;
    }
    //     ,            。
    
  • 를 얻기 위해 다시 쓰기를 요구합니다.
  • ActionBarDrawerToggle.Delegate Provider, 이름만 보면 Delegate를 제공할 수 있습니다.델게이트 같은 건 뭘 할 수 있을까요?
    Action Bar가 지시하는drawable와 내용 설명을 설정할 수 있습니다
    ActionBar의 context, 표시된drawable, 되돌아오는 아이콘이 보일 지 여부 등 제공
    AppCompatActivity 기능을 간단하게 사용할 수 있습니다.

  • ActionBar 대신 ToolBar를 사용하도록 하겠습니다.
  • 주의 파일 스타일 사용하기 시작합니다.xml, Theme.AppCompat.NoActionBar 이 테마입니다. 그렇지 않으면 다음에 버그를 반복해서 추가할 수 있습니다:
    <resources>
    
    <style name="AppBaseTheme" parent="Theme.AppCompat.NoActionBar">
    
        -- colorPrimaryDark-->
        <item name="colorPrimaryDark">@android:color/transparent
    style>
    
    <style name="AppTheme" parent="AppBaseTheme">style>
    resources>
  • layout에서 새 xml 파일을 만듭니다.ToolBar:
    "1.0" encoding="utf-8"?>
    .support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:minHeight="?attr/actionBarSize" >
    
    "@+id/toolbar_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Toolbar Title"
        android:textAppearance="?android:attr/textAppearanceLarge" />
    .support.v7.widget.Toolbar>
  • 레이아웃 파일 activitymain에서include가 Toolbar에 들어가면 ToolBar는 고도의 유연성을 가지고 레이아웃의 임의의 위치에 놓을 수 있습니다.
    
    <RelativeLayout 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"
    tools:context=".MainActivity">
    <include
        layout="@layout/toolbar"
        />
    RelativeLayout>
    
  • Activity에서 초기화
    public class MainActivity extends AppCompatActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    
    
    }
    
    private void init(){
        Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    
    
    Toolbar의 용법은 여기에 서술하지 않습니다
  • 좋은 웹페이지 즐겨찾기