回答:
タイトルバーに戻るボタンを作成するには、2つの簡単な手順があります。
まず、タイトルバーに戻るボタンを配置するアクティビティの次のコードを使用して、アプリケーションアイコンをクリック可能にします。
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を与えます。なぜなのかご存知ですか?
アクションバー/ツールバーに戻るボタンを適切に追加することができました
@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()の使用は、アプリが現在のタスクの所有者である場合(つまり、ユーザーがアプリからこのタスクを開始した場合)にのみ適しています。それが当てはまらず、アクティビティが別のアプリに属するタスクで開始された場合、上に移動すると、アプリに属する新しいタスクが作成されます。これには、新しいバックスタックを作成する必要があります。
アクティビティがアクティビティを拡張する場合
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>
親アクティビティの指定を参照してください
アクティビティが拡張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()
で、電話の戻るボタンとツールバーの矢印が同じようになります。
まず、このコードを書く必要があります
@Override
protected void onCreate(Bundle savedInstanceState) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
次に、この行をマニフェストに追加します
<activity android:name=".MainActivity"
android:parentActivityName=".PreviousActivity"></activity>
うまくいくと思います
Android Studioで5.1の新しいサポートライブラリを使用している場合は、代わりにこれをAppCompatActivityで使用できます
ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.mipmap.ic_arrow_back_white_24dp);
actionBar.setDisplayShowHomeEnabled(true);
乾杯。
グーグルがここで説明する最も簡単な方法とベストプラクティス:
1. childActivityの親をに追加しますAndroidManifest.xml
。
<activity
android:name=".ChildActivity"
android:parentActivityName=".ParentActivity" >
</activity>
2. childActivityの戻るボタンをアクティブにします。
myActionOrActionSupportBar.setDisplayHomeAsUpEnabled(true);
私のために働いた、私もそれがあなたのために働くことを願っています。
私が見つけた素晴らしい時間の後、テーマオプションが私のコードの主な問題であり、以下は私のためにツールバーを表示する適切な方法です
AndroidManifestファイルでは、最初にテーマスタイルを変更する必要があります
Theme.AppCompat.Light.DarkActionBar
to
Theme.AppCompat.Light.NoActionBar
次に、あなたの活動xmlであなたはあなたのようなツールバーを呼び出す必要があります
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:id="@+id/toolbar"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:elevation="4dp"/>
そして、このツールバーはあなたのJavaファイルで
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
そして、ツールバーを表示する場合、UはNullPointerExceptionを回避するためにnullをチェックする必要があります。
if(getSupportActionBar() != null){
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
自宅でのアクティビティには、これを追加してください
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId()==android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
またはご希望のアクティビティに戻る
public boolean onOptionsItemSelected(MenuItem item){
Intent myIntent = new Intent(getApplicationContext(), YourActivity.class);
startActivityForResult(myIntent, 0);
return true;
}
たくさんの複合体の答えを見たので、これが私のコードです。ここで働いています。これは2つの方法で実現できます。
1)Stardard Android互換性
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.app.NavUtils;
import android.view.MenuItem;
import android.view.View;
public class EditDiscoveryActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_discovery);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
/*toolbar.setNavigationIcon(R.drawable.ic_arrow_white_24dp);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});*/
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
}
2)カスタムアイコンを使用する
コメントでコードを使用したい場合は、ic_arrow_white_24dp.xmlという名前のドローアブルにこのファイルを追加する必要があります。
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#ffffff"
android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z"/>
</vector>
このコードで。
toolbar.setNavigationIcon(R.drawable.ic_arrow_white_24dp);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
それがここの人々を助けることを願っています!
ActionBarActivity
それを使用しない軽量バージョンでも、同じ動作がここにあります:
public class ToolbarConfigurer implements View.OnClickListener {
private Activity activity;
public ToolbarConfigurer(Activity activity, Toolbar toolbar, boolean displayHomeAsUpEnabled) {
toolbar.setTitle((this.activity = activity).getTitle());
if (!displayHomeAsUpEnabled) return;
toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
toolbar.setNavigationOnClickListener(this);
}
@Override
public void onClick(View v) {
NavUtils.navigateUpFromSameTask(activity);
}
}
使用方法:置きnew ToolbarConfigurer(this, (Toolbar) findViewById(R.id.my_awesome_toolbar), true);
にonCreate
。
下記のコードをマニフェストファイルに追加する必要があります。戻る矢印機能を追加するアクティビティを検索します。あなたがそれを見つけたら、それでいいか、アクティビティを作成してください
<activity android:name=".SearchActivity">
</activity>
次に、間に次の3行のコードを追加します。
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.raqib.instadate.MainActivity" />
そして、onCreate();にこのコードを追加することを忘れないでください。戻る矢印が必要な特定のアクティビティのメソッド。
Toolbar toolbar = (Toolbar) findViewById(R.id.searchToolbar);
setSupportActionBar(toolbar);
try{
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}catch(NullPointerException e){
Log.e("SearchActivity Toolbar", "You have got a NULL POINTER EXCEPTION");
}
これは私が問題を解決した方法です。ありがとう。
他の回答は、Toolbar
ウィジェットのXMLでこれを設定することもできることについては触れていません。
app:navigationIcon="?attr/homeAsUpIndicator"
例えば:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:navigationIcon="?attr/homeAsUpIndicator"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:title="@string/title_activity_acoustic_progress" />
2020年に必要なこと:
(MainActivityに戻りたいと考えている場合)
protected void onCreate(Bundle savedInstanceState){
...
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
public boolean onOptionsItemSelected(MenuItem item) {
Intent myIntent = new Intent(getApplicationContext(), MainActivity.class);
startActivityForResult(myIntent, 0);
return true;
}
ActionBarを使用している場合は、このドキュメントを読む必要があります 。http://developer.android.com/reference/android/app/ActionBar.html#setDisplayHomeAsUpEnabled(boolean)
次に、メソッドonOptionsItemSelected(MenuItem)を上書きして、android.R.id.homeイベントが発生することを確認する必要があります。次に、ユーザーがアクションバーのその戻るボタンをクリックしたことを確認します
アプリマニフェストで親アクティビティを指定することにより、コードなしでも実行できます。アクティビティAに移動するアクティビティBの戻るボタンが必要な場合は、マニフェストでアクティビティBの親としてアクティビティAを追加するだけです。
私のアプリにはいつでも行き来できる3つのアクティビティがあるため、正しい答えを得るためにいくつかの答えを組み合わせる必要がありました。Activity1> Activity2> Activity3。アクティビティ3で何かをしているときに、戻るボタンがアクティビティ2に正しく戻っていました。ただし、Activity2からを使用するとfinish()
、Activity1ではなくActivity3に戻っていました。そして、AppCompatActivityを拡張しています。だから、私の解決策は:
public class Activity2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
getSupportActionBar().setHomeButtonEnabled(true);
}
}
AndroidManifest.xmlの場合:
<activity android:name=".activities.Activity2"
android:parentActivityName="com.example.appname.activities.Activity1">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.appname.activities.Activity1" />
</activity>
そして最後に、私のメニューのアクションボタン(actionbar):
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
...
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
のNavUtils.navigateUpFromSameTask(this);
代わりにを使用すると、うまくいきましたfinish()
。
私を助け、他の人に役立つかもしれない何かを共有するだけです。ここでの答えのほとんどは正しいですが、を使用するとgetActionBar().setDisplayHomeAsUpEnabled(true);
、これは私にとってはうまくいきませんでした。私が抱えていた問題は、2つ目のアクティビティを手動で作成しようとしていたことですが、詳細が含まれています。
私の問題を本当に解決したのは、Android開発者向けチュートリアル( Android Studio独自のツールを使用して2つ目のアクティビティを作成するための https://developer.android.com/training/basics/firstapp/starting-activity)でした:
Create the second activity
1. In the Project window, right-click the app folder and select New > Activity > Empty Activity.
2. In the Configure Activity window, enter "DisplayMessageActivity" for Activity Name and click Finish (leave all other properties set to the defaults).
Android Studio automatically does three things:
- Creates the DisplayMessageActivity file.
- Creates the corresponding activity_display_message.xml layout file.
- Adds the required <activity> element in AndroidManifest.xml.
また、単にonBackPressed()
onClickリスナーに入れることもできます。これにより、ボタンはAndroidアプリのデフォルトの「戻る/上」ボタンのように機能します。
Toolbar toolbar=findViewById(R.id.toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if (getSupportActionBar()==null){
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()==android.R.id.home)
finish();
return super.onOptionsItemSelected(item);
}
これは私のために働いています。2つのアクティビティ(Activityone、Activitytwo)があるとします。
Activitytwo内でこのコードを使用します
@Override
protected void onCreate(Bundle savedInstanceState) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
Activityone
//when you need to go second activity
startActivity(new Intent(Activityone.this, Activitytwo.class));
これはマニフェストファイル内の2番目のアクティビティに含める必要があります
<activity android:name=".Activitytwo"
android:parentActivityName=".Activityone"></activity>
そして結果はこのようになります
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;
}
これは私のために働いていますgetSupportActionBar()。setDisplayHomeAsUpEnabled(false); ここに画像の説明を入力してください