แสดงลูกศรย้อนกลับบนแถบเครื่องมือ


496

ฉันกำลังย้ายจากActionBarไปยังToolbarในแอปพลิเคชันของฉัน แต่ผมไม่ทราบวิธีการแสดงและกิจกรรมชุดคลิกที่ลูกศรย้อนกลับบนเหมือนผมใน ToolbarActionbar

ป้อนคำอธิบายรูปภาพที่นี่

ด้วยการโทรฉันActionBar mActionbar.setDisplayHomeAsUpEnabled(true)แต่ไม่มีวิธีการที่คล้ายกันเช่นนี้

มีใครเคยเผชิญกับสถานการณ์นี้บ้างและพบวิธีแก้ปัญหาหรือไม่?


วิธีการเกี่ยวกับstackoverflow.com/a/29809691/1644301
mDroidd

ใช้ getSupportActionBar () ตัวอย่างเช่นที่นี่ freakyjolly.com/how-to-add-back-arrow-in-android-activity
รหัส Spy

คำตอบ:


900

หากคุณกำลังใช้ActionBarActivityแล้วคุณสามารถบอก Android เพื่อใช้Toolbarเป็นActionBarเช่นดังนั้น:

Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);

แล้วโทรไปที่

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);

จะทำงาน. คุณยังสามารถใช้สิ่งนั้นในแฟรกเมนต์ที่ต่อกับActionBarActivitiesคุณสามารถใช้มันได้เช่นนี้:

((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);

หากคุณไม่ได้ใช้ActionBarActivitiesหรือถ้าคุณต้องการที่จะได้รับลูกศรย้อนกลับบนToolbarที่ไม่ได้ตั้งค่าเป็นของSupportActionBarคุณคุณสามารถใช้ต่อไปนี้:

mActionBar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_action_back));
mActionBar.setNavigationOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
       //What to do on back clicked
   }
});

หากคุณกำลังใช้android.support.v7.widget.Toolbarงานอยู่คุณควรเพิ่มรหัสต่อไปนี้ในAppCompatActivity:

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}

12
Googles ไอคอนการออกแบบวัสดุอย่างเป็นทางการ repo github.com/google/material-design-icons/blob/master/navigation/…
MrEngineer13

70
หากคุณใช้ appcompat-v7 เวอร์ชันล่าสุด (21.0.3 ขึ้นไป) คุณสามารถใช้ R.drawable.abc_ic_ab_back_mtrl_am_alpha สำหรับลูกศรวาดกลับซึ่งรวมอยู่ในไลบรารีการสนับสนุน
Taeho Kim

23
โปรดทราบว่า getResources (). getDrawable (... ) เลิกใช้แล้ว คุณควรใช้ ContextCompat.getDrawable (บริบท, ... ) แทน
Quentin S.

7
ไม่ได้ทำงานไม่สามารถหาค่าไม่ได้R.drawable.abc_ic_ab_back_mtrl_am_alpha R.drawable.ic_action_back
Henrique de Sousa

10
เพื่อรับไอคอน "ย้อนกลับ" จากห้องสมุดสนับสนุน toolbar.setNavigationIcon(android.support.v7.appcompat.R.drawable.abc_ic_ab_back_material);
Bolein95

215

ฉันเห็นคำตอบมากมาย แต่นี่คือของฉันที่ไม่ได้พูดถึงก่อน ใช้งานได้จาก API 8+

public class DetailActivity extends AppCompatActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_detail);

    // toolbar
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    // add back arrow to toolbar
    if (getSupportActionBar() != null){
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // handle arrow click here
    if (item.getItemId() == android.R.id.home) {
        finish(); // close this activity and return to preview activity (if there is any)
    }

    return super.onOptionsItemSelected(item);
}

3
ใช้งานได้เฉพาะเมื่อคุณตั้งค่า Toolbar เป็น ActionBar มันไม่ได้สำหรับแถบเครื่องมือแบบสแตนด์อโลน
Kuffs

20
onOptionItemSelected()โหวตขึ้นสำหรับสิ่งนี้จะเสร็จสมบูรณ์ในสิ่งที่ MrEngineer13 ไม่ได้ครอบคลุมในคำตอบของเขา
Atul

2
ขอบคุณสิ่งนี้ใช้ได้สำหรับฉัน ดูเหมือนจะดีกว่าการใช้ฟังการคลิกฉันไม่สนใจจริง ๆ เกี่ยวกับแถบเครื่องมือแบบสแตนด์อโลน
Mike76

ฉันจะเปลี่ยนสีของลูกศรได้อย่างไร
Dmitry

ฉันไม่ต้องการบรรทัดใต้บรรทัดความคิดเห็น "แถบเครื่องมือ" ทำงานได้ดี
Hack06

173

มีหลายวิธีในการบรรลุเป้าหมายนี่คือสิ่งที่ฉันชอบ:

เค้าโครง:

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    app:navigationIcon="?attr/homeAsUpIndicator" />

กิจกรรม:

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

    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // back button pressed
        }
    });

13
การใช้แอตทริบิวต์ของชุดรูปแบบนั้นดีกว่าคำแนะนำอื่น ๆ ส่วนใหญ่ในคำถามนี้
Pedro Loureiro

3
แทนที่จะใช้setNavigationOnClickListener()คุณสามารถเพิ่มcase android.R.id.home:ข้างใน 'onOptionsItemSelected () `
eugene

1
case android.R.id.homeไม่ได้ทำงานให้ฉัน ดังนั้นหลังจากค้นหาไปซักพักแล้วคำตอบของคุณก็คือเคล็ดลับ .. ขอบคุณ
deejay

นี่เป็นทางออกที่แท้จริงโดยเฉพาะอย่างยิ่งถ้าคุณต้องการใช้ไอคอนย้อนกลับเริ่มต้นของระบบ Android
Nauman Aslam

ใช้ toolbar.setNavigationOnClickListener {onBackPressed ()}
filthy_wizard

74

คุณสามารถใช้แถบเครื่องมือ setNavigationIcon วิธีการ เอกสาร Android

mToolBar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);

mToolBar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        handleOnBackPress();
    }
});

1
คุณช่วยเพิ่มคำอธิบายลงในคำตอบของคุณได้ไหม? คำตอบที่เป็นรหัสเท่านั้นจะขมวดคิ้วอยู่บน SO
honk

1
โปรดทราบวิธีการที่setNavigationOnClickListener()ได้รับการเพิ่มใน api ระดับ 21 และสูงกว่า
Ali Mehrpour

3
R.drawable.abc_ic_ab_back_mtrl_am_alpha หายไปในขณะนี้ในการสนับสนุน 23.2.0 ใช้คำตอบที่ยอมรับแทน
Milan

25

หากคุณไม่ต้องการสร้างที่กำหนดเองToolbarคุณสามารถทำได้เช่นนี้

public class GalleryActivity extends AppCompatActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        ...  
        getSupportActionBar().setTitle("Select Image");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            finish();
        }
        return super.onOptionsItemSelected(item);
    }
}                     

ในคุณ AndroidManifest.xml

<activity
    android:name=".GalleryActivity"
    android:theme="@style/Theme.AppCompat.Light">        
</activity>

คุณยังสามารถใส่นี้android:theme="@style/Theme.AppCompat.Light"จะ<aplication>แท็กสำหรับนำไปใช้กับกิจกรรมทั้งหมด

ป้อนคำอธิบายรูปภาพที่นี่


2
ขอบคุณสำหรับif (item.getItemId() == android.R.id.home)
Adizbek Ergashev

22
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.setNavigationIcon(R.drawable.back_arrow); // your drawable
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed(); // Implemented by activity
        }
    });

และสำหรับ API 21+ android:navigationIcon

<android.support.v7.widget.Toolbar
    android:navigationIcon="@drawable/back_arrow"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"/>

ควรเป็นคำตอบที่ยอมรับได้
Anton Malyshev

17

ฉันใช้วิธีนี้จากเอกสารสำหรับนักพัฒนาซอฟต์แวร์ของ Google :

@Override
public void onCreate(Bundle savedInstanceState) {
  ...
  getActionBar().setDisplayHomeAsUpEnabled(true);
}

หากคุณได้รับข้อยกเว้นพอยน์เตอร์พอยน์เตอร์มันอาจขึ้นอยู่กับธีม ลองใช้ชุดรูปแบบที่แตกต่างกันในรายการหรือใช้สิ่งนี้หรือ:

@Override
public void onCreate(Bundle savedInstanceState) {
  ...
  getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

จากนั้นในรายการที่ฉันตั้งค่ากิจกรรมหลักสำหรับกิจกรรมปัจจุบัน:

<activity
        android:name="com.example.myapp.MyCurrentActivity"
        android:label="@string/title_activity_display_message"
     android:parentActivityName="com.example.myfirstapp.MainActivity" >
    <!-- Parent activity meta-data to support 4.0 and lower -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.myapp.MyMainActivity" />
</activity>

ฉันหวังว่านี่จะช่วยคุณได้!


1
ลิงก์ google docs และลิงก์ที่ใช้getSupportActionBar()งานได้ ขอบคุณ!
ริ

15

หากคุณกำลังใช้งานAppCompatActivityและไม่ได้ใช้งานเพราะคุณไม่ต้องการรับข้อมูลอัตโนมัติActionBarเพราะคุณต้องการแยกออกToolbarเนื่องจากความต้องการออกแบบวัสดุของคุณและCoordinatorLayoutหรือAppBarLayoutให้พิจารณาสิ่งนี้:

คุณยังคงสามารถใช้งานได้AppCompatActivityโดยไม่จำเป็นต้องหยุดใช้เพื่อให้สามารถใช้ a <android.support.v7.widget.Toolbar>ใน xml ของคุณได้ เพียงปิดสไตล์แอ็คชั่นบาร์ดังนี้:

ก่อนอื่นรับสไตล์จากหนึ่งในชุดรูปแบบ NoActionBar ที่คุณชอบในตัวคุณstyles.xmlฉันTheme.AppCompat.Light.NoActionBarชอบดังนี้:

<style name="SuperCoolAppBarActivity" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/primary</item>

    <!-- colorPrimaryDark is used for the status bar -->
    <item name="colorPrimaryDark">@color/primary_dark</item>
    ...
    ...
</style>

ในรายการแอพของคุณเลือกชุดรูปแบบสไตล์ลูกที่คุณเพิ่งกำหนดเช่น:

    <activity
        android:name=".activity.YourSuperCoolActivity"
        android:label="@string/super_cool"
        android:theme="@style/SuperCoolAppBarActivity">
    </activity>

ใน Activity Xml ของคุณหากแถบเครื่องมือถูกกำหนดเช่นนั้น:

...
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        />
...

จากนั้นและนี่คือส่วนสำคัญคุณตั้งค่าแถบการสนับสนุนเป็น AppCompatActivity ที่คุณกำลังขยายดังนั้นแถบเครื่องมือใน xml ของคุณจะกลายเป็นแถบการกระทำ ฉันรู้สึกว่านี่เป็นวิธีที่ดีกว่าเพราะคุณสามารถทำสิ่งต่าง ๆ ที่ ActionBar อนุญาตเช่นเมนูชื่อกิจกรรมอัตโนมัติการจัดการการเลือกรายการ ฯลฯ โดยไม่ต้องใช้วิธีเพิ่มตัวจัดการการคลิกที่กำหนดเอง ฯลฯ

ในการแทนที่ onCreate ของกิจกรรมให้ทำดังนี้:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_super_cool);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

    setSupportActionBar(toolbar);
    //Your toolbar is now an action bar and you can use it like you always do, for example:
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
} 

8
MyActivity extends AppCompatActivity {

    private Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        toolbar = (Toolbar) findViewById(R.id.my_toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        toolbar.setNavigationOnClickListener(arrow -> onBackPressed());
    }

คุณสามารถใช้ retrolambda
Artemiy

นี่คือสิ่งที่ฉันมีและมันไม่ทำงาน ไม่สามารถคิดออก
filthy_wizard

7

วิธีที่ง่ายและสะดวกในการแสดงปุ่มย้อนกลับบนแถบเครื่องมือ

วางรหัสนี้ในวิธีการสร้าง

 if (getSupportActionBar() != null){

            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
        }

วางวิธีการแทนที่นี้นอกเมธอด onCreate

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if(item.getItemId()== android.R.id.home) {

        finish();
    }
    return super.onOptionsItemSelected(item);
}

7

ใน Kotlin มันจะเป็น

private fun setupToolbar(){
    toolbar.title = getString(R.string.YOUR_TITLE)
    setSupportActionBar(toolbar)
    supportActionBar?.setDisplayHomeAsUpEnabled(true)
    supportActionBar?.setDisplayShowHomeEnabled(true)
}

// don't forget click listener for back button
override fun onSupportNavigateUp(): Boolean {
    onBackPressed()
    return true
}

6

ได้อย่างง่ายดายคุณสามารถทำได้

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}

เครดิต: https://freakycoder.com/android-notes-24-how-to-add-back-button-at-toolbar-941e6577418e


5

ในAppCompatActivityตัวอย่างที่คุณสามารถทำได้

public class GrandStatActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_grand_stat);
    }

    @Override
    public void onResume() {
        super.onResume();

        // Display custom title
        ActionBar actionBar = this.getSupportActionBar();
        actionBar.setTitle(R.string.fragment_title_grandstats);

        // Display the back arrow
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }

    // Back arrow click event to go to the parent Activity
    @Override
    public boolean onSupportNavigateUp() {
        onBackPressed();
        return true;
    }

}

4

ในไฟล์รายการกิจกรรมที่คุณต้องการเพิ่มปุ่มย้อนกลับเราจะใช้คุณสมบัติandroid: parentActivityName

        <activity
        android:name=".WebActivity"
        android:screenOrientation="portrait"
        android:parentActivityName=".MainActivity"
        />

PSแอตทริบิวต์นี้ถูกนำมาใช้ใน API ระดับ 16


3

มันทำงานได้อย่างสมบูรณ์แบบ

public class BackButton extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.chat_box);
        Toolbar chatbox_toolbar=(Toolbar)findViewById(R.id.chat_box_toolbar);
        chatbox_toolbar.setTitle("Demo Back Button");
        chatbox_toolbar.setTitleTextColor(getResources().getColor(R.color.white));
        setSupportActionBar(chatbox_toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        chatbox_toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //Define Back Button Function
            }
        });
    }
}

3

ก่อนอื่นคุณต้องเริ่มต้นแถบเครื่องมือ:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

จากนั้นเรียกปุ่มย้อนกลับจากแถบการกระทำ:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}

2

หากคุณต้องการรับลูกศรย้อนกลับบน Toolbar ที่ไม่ได้ตั้งค่าเป็น SupportActionBar ของคุณ:

(Kotlin)

val resId = getResIdFromAttribute(toolbar.context, android.R.attr.homeAsUpIndicator)
toolbarFilter.navigationIcon = ContextCompat.getDrawable(toolbar.context, resId)
toolbarFilter.setNavigationOnClickListener { fragmentManager?.popBackStack() }

เพื่อรับ res จากคุณลักษณะ:

@AnyRes
fun getResIdFromAttribute(context: Context, @AttrRes attr: Int): Int {
    if (attr == 0) return 0
    val typedValueAttr = TypedValue()
    context.theme.resolveAttribute(attr, typedValueAttr, true)
    return typedValueAttr.resourceId
}

1

เพิ่มสิ่งนี้ไปยัง xml ของกิจกรรมในโฟลเดอร์เลย์เอาต์:

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">
    <android.support.v7.widget.Toolbar
        android:id="@+id/prod_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>

ทำให้แถบเครื่องมือคลิกได้เพิ่มเหล่านี้ในวิธีการสร้าง:

Toolbar toolbar = (Toolbar) findViewById(R.id.prod_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        finish();
    }
});

1

อาจเป็นวิธีที่เชื่อถือได้มากขึ้นในการรับไอคอนขึ้นจากธีมของคุณ (หากไม่ได้ใช้แถบเครื่องมือเป็นแถบการกระทำของคุณ):

toolbar.navigationIcon = context.getDrawableFromAttribute(R.attr.homeAsUpIndicator)

เพื่อที่จะเปลี่ยนแอตทริบิวต์ของชุดรูปแบบเป็นรูปวาดได้ฉันใช้ฟังก์ชันส่วนขยาย:

fun Context.getDrawableFromAttribute(attributeId: Int): Drawable {
    val typedValue = TypedValue().also { theme.resolveAttribute(attributeId, it, true) }
    return resources.getDrawable(typedValue.resourceId, theme)
}

0

หากคุณใช้DrawerLayoutพร้อมActionBarDrawerToggleจากนั้นให้แสดงปุ่มย้อนกลับแทนปุ่มเมนู (และ viceversa) คุณต้องเพิ่มรหัสนี้ในกิจกรรมของคุณ:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ...

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.application_name, R.string.application_name);
    mDrawerLayout.addDrawerListener(mDrawerToggle);

    mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_arrow_back_white_32dp);
    mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onBackPressed(); // Or you can perform some other action here when Back button is clicked.
        }
    });
    mDrawerToggle.syncState();
    // ...
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (mDrawerToggle.onOptionsItemSelected(item))
        return true;

    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
        // ...
    }

    return super.onOptionsItemSelected(item);
}

public void showBackInToolbar(boolean isBack) {
    // Remove next line if you still want to be able to swipe to show drawer menu.
    mDrawerLayout.setDrawerLockMode(isBack ? DrawerLayout.LOCK_MODE_LOCKED_CLOSED : DrawerLayout.LOCK_MODE_UNLOCKED);
    mDrawerToggle.setDrawerIndicatorEnabled(!isBack);
    mDrawerToggle.syncState();
}

ดังนั้นเมื่อคุณต้องการแสดงปุ่มย้อนกลับแทนปุ่มเมนูโทรshowBackInToolbar (จริง)และถ้าคุณต้องการปุ่มเมนูโทรshowBackInToolbar (false)(เท็จ)

คุณสามารถสร้างลูกศรย้อนกลับ (ic_arrow_back_white_32dp) ที่นี่ค้นหาarrow_backในส่วนภาพตัดปะ (ใช้ค่าเริ่มต้น 32dp ด้วยการแพ็ด 8dp) เพียงเลือกสีที่คุณต้องการ


0

คุณสามารถเพิ่มRelative layoutหรือLinear LayoutในToolbarและวางมุมมองภาพสำหรับไอคอนด้านหลังหรือไอคอนปิดได้ทุกที่ในแถบเครื่องมือตามที่คุณต้องการ

ตัวอย่างเช่นฉันได้ใช้เค้าโครงสัมพันธ์ในแถบเครื่องมือของฉัน

 <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar_top"
                android:layout_width="match_parent"
                android:layout_height="35dp"
                android:minHeight="?attr/actionBarSize"
                android:nextFocusDown="@id/netflixVideoGridView"
                app:layout_collapseMode="pin">

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">


                    <TextView

                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Myflix"
                        android:textAllCaps="true"
                        android:textSize="19sp"
                        android:textColor="@color/red"
                        android:textStyle="bold" />


                    <ImageView
                        android:id="@+id/closeMyFlix"
                        android:layout_alignParentRight="true"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        app:srcCompat="@drawable/vector_close" />


                </RelativeLayout>

            </android.support.v7.widget.Toolbar>

และดูเหมือนว่านี้:

ป้อนคำอธิบายรูปภาพที่นี่

คุณสามารถเพิ่ม listener การคลิกในมุมมองรูปภาพนั้นได้จาก Activity หรือแฟรกเมนต์เช่นนี้

  closeMyFlix.setOnClickListener({
            Navigator.instance.showFireTV(  activity!!.supportFragmentManager)
        })

0

ด้วย Kotlin มันกลายเป็น:

xml:

<include
android:id="@+id/tbSignToolbar "
layout="@layout/toolbar_sign_up_in"/>

ในกิจกรรมของคุณ: -

setSupportActionBar(tbSignToolbar as Toolbar?)//tbSignToolbar :id of your toolbar 
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)

0

หากคุณกำลังใช้ JetPack Navigation

นี่คือเค้าโครงของ MainActivity

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                               xmlns:app="http://schemas.android.com/apk/res-auto"
                                               xmlns:tools="http://schemas.android.com/tools"
                                               android:layout_width="match_parent"
                                               android:layout_height="match_parent"
                                               tools:context=".MainActivity">

<androidx.appcompat.widget.Toolbar
        android:id="@+id/toolBar"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

</androidx.appcompat.widget.Toolbar>

<fragment
        android:id="@+id/my_nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:defaultNavHost="true"
        app:layout_constraintTop_toBottomOf="@id/toolBar"
        app:layout_constraintBottom_toTopOf="parent"
        app:navGraph="@navigation/nav_graph"/>

ตั้งค่าแถบเครื่องมือของคุณในกิจกรรมของคุณเช่นด้านล่างใน onCreate () ของคลาสกิจกรรมของคุณ

val navHostFragment = supportFragmentManager
        .findFragmentById(R.id.my_nav_host_fragment) as NavHostFragment? ?: return

val navController = navHostFragment.findNavController()
val toolBar = findViewById<Toolbar>(R.id.toolBar)
setSupportActionBar(toolBar) // To set toolBar as ActionBar
setupActionBarWithNavController(navController)

setupActionBarWithNavController (navController) จะสร้างปุ่มย้อนกลับบนทูลบาร์หากจำเป็นและจัดการกับฟังก์ชั่น backButton หากคุณต้องการเขียนฟังก์ชั่น CustomBack ให้สร้าง callBack ดังด้านล่างในเมธอด fragment onCreate () ของคุณ

val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
        // Handle the back button event
    }

จากเอกสาร: https://developer.android.com/guide/navigation/navigation-custom-back


0

หากคุณกำลังใช้ androidx.appcompat.app.AppCompatActivityเพียงใช้:

Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

จากนั้นเพียงแค่กำหนดใน Manifest.xmlกิจกรรมหลัก

<activity
    android:name=".MyActivity"
    ...>
  <meta-data
      android:name="android.support.PARENT_ACTIVITY"
      android:value=".ParentActivity" />
</activity>

แต่ถ้าคุณใช้ Toolbarและคุณต้องการพฤติกรรมที่กำหนดเองเพียงใช้:

<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar" 
    app:navigationIcon="?attr/homeAsUpIndicator"
    .../>

และในกิจกรรมของคุณ:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //....
    }
});
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.