在标题栏中创建返回按钮只需两个简单的步骤:
首先,在您想要标题栏中有返回按钮的活动中,使用以下代码使应用程序图标可点击:
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
在添加了上述代码之后,您将看到一个向左的箭头出现在应用程序图标的左侧。
第二步,在完成以上操作之后,您仍然需要创建代码以利用单击事件。为此,请注意,当您实际点击应用程序图标时,会调用onOptionsItemSelected
方法。因此,要返回到先前的活动,请将该方法添加到您的活动中,并在其中放置Intent
代码,该代码将使您返回到先前的活动。例如,假设您要“返回”的活动名为MyActivity
,则可以按以下方式编写该方法:
public boolean onOptionsItemSelected(MenuItem item){
Intent myIntent = new Intent(getApplicationContext(), MyActivity.class);
startActivityForResult(myIntent, 0);
return true;
}
就是这样了!
(在Android开发者API中,建议通过深入研究清单并添加类似android:parentActivityName
的内容。 但对我来说似乎不起作用。以上方法更简单且更可靠。)
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
在您的活动中
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
使用此代码
@Override
public void onCreate(Bundle savedInstanceState) {
...
getActionBar().setDisplayHomeAsUpEnabled(true);
}
在此之后,在onOptionsItemSelected
方法中编写以下代码
int id = item.getItemId();
if (id==android.R.id.home) {
finish();
}
getActionBar()
给了我一个 null 值;你知道为什么吗? - msysmilu - false
- true
- Paul Verest我终于成功地将返回按钮添加到了操作栏/工具栏中。
@Override
public void onCreate(Bundle savedInstanceState) {
...
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
public boolean onCreateOptionsMenu(Menu menu) {
return true;
}
1. - 将活动添加到AndroidManifest.xml,并确保提供元数据:
<activity
android:name="com.example.myfirstapp.DisplayMessageActivity"
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.myfirstapp.MainActivity" />
</activity>
2. - 将以下代码添加到活动的 onCreate 方法中:
@Override
public void onCreate(Bundle savedInstanceState) {
...
getActionBar().setDisplayHomeAsUpEnabled(true);
}
3. - 覆盖onOptionsItemSelected方法,使用NavUtils.navigateUpFromSameTask()静态方法来穿过堆栈导航。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
然而,仅当您的应用程序是当前任务的所有者(即,用户从您的应用程序开始此任务)时,使用navigateUpFromSameTask()才是合适的。如果不是这样,并且您的活动是在属于不同应用程序的任务中启动的,则导航 Up 应该创建一个属于您的应用程序的新任务,这需要您创建一个新的后退堆栈。
如果您的活动确实扩展了Activity类
public class YourActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xxx);
getActionBar().setHomeButtonEnabled(true);
[...]
}
[...]
}
如果您的操作扩展了AppCompatActivity
public class YourActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xxx);
getSupportActionBar().setHomeButtonEnabled(true);
[...]
}
[...]
}
没有其他要做的了,查看添加向上操作
[可选] 要显式地定义父活动,请像这样修改您的Manifest.xml:
<application ... >
...
<!-- The main/home activity (it has no parent activity) -->
<activity
android:name="com.example.myfirstapp.MainActivity" ...>
...
</activity>
<!-- A child of the main activity -->
<activity
android:name="com.example.myfirstapp.YourActivity "
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.myfirstapp.MainActivity" />
</activity>
</application>
请参阅指定父Activity
首先,您需要编写以下代码
@Override
protected void onCreate(Bundle savedInstanceState) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
接着在清单文件中添加这一行
<activity android:name=".MainActivity"
android:parentActivityName=".PreviousActivity"></activity>
我认为它会起作用
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
然后在代码中添加以下函数:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
如果您的活动扩展了AppCompatActivity
,则需要像下面这样重写onSupportNavigateUp()
方法:
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
...
}
@Override
public void onBackPressed() {
super.onBackPressed();
this.finish();
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
}
在你的onBackPressed()
方法中处理逻辑,然后在onSupportNavigateUp()
方法中调用该方法,这样手机上的返回按钮和工具栏上的箭头可以执行相同的操作。
ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.mipmap.ic_arrow_back_white_24dp);
actionBar.setDisplayShowHomeEnabled(true);
干杯。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.YourxmlFileName);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id==android.R.id.home) {
finish();
return true;
}
return false;
}