У меня есть приложение для Android с этим снимком экрана
, и все, что я хочу сделать, - это иметь возможность щелкнуть значок в нижней навигации и вместо отображенияпредставление, оно сохраняет текущее представление, которое отображается, но вместо этого оно использует DrawerNavigation для переключения бокового меню, чтобы открыть.
здесь мой action_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/navigationView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
app:itemBackground="?selectableItemBackgroundBorderless"
app:itemHorizontalTranslationEnabled="true"
android:layout_alignParentBottom="true"
app:menu="@menu/bottom_nav"
app:itemIconTint="@drawable/nav_item_color_state"
app:itemTextColor="@drawable/nav_item_color_state" />
</RelativeLayout>
MainActivity.java
package com.example.bottomnavigationfromempty;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import androidx.appcompat.app.ActionBar;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.navigation.NavigationView;
public class MainActivity extends AppCompatActivity {
private BottomNavigationView bottomNavigationView;
private ActionBar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = getSupportActionBar();
BottomNavigationView navigationView = findViewById(R.id.navigationView);
navigationView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
toolbar.setTitle("Uno");
loadFragment(new UnoFragment());
}
BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener =
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.uno:
toolbar.setTitle("Uno");
loadFragment(new UnoFragment());
return true;
case R.id.dos:
toolbar.setTitle("Dos");
loadFragment(new DosFragment());
return true;
case R.id.tres:
toolbar.setTitle("Tres");
loadFragment(new TresFragment());
return true;
case R.id.cautro:
toolbar.setTitle("Cautro");
loadFragment(new CautroFragment());
return true;
}
return false;
}
};
private void loadFragment(Fragment fragment) {
// load fragment
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.container, fragment);
transaction.addToBackStack(null);
transaction.commit();
}
}
У меня есть 4 файла, которые называются фрагмент_фрагмент.xml, фрагмент_дос.xml, фрагмент_трес.xml и фрагмент.cautro.xml
Они все одинаковые, так что вот фрагмент_uno.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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="DosFragment">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Dos"
android:gravity="center"
android:textSize="20dp"
android:textColor="#000" />
</FrameLayout>
вот код Java UnoFragment.xml
package com.example.bottomnavigationfromempty;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
public class UnoFragment extends Fragment {
// required default empty constructor
public UnoFragment() {
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_uno, container, false);
}
}
У меня есть файл bottom_nav.xml в папке меню в разделе res, как этот
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/uno"
android:icon="@drawable/ic_extension_black_24dp"
android:title="Uno" />
<item
android:id="@+id/dos"
android:icon="@drawable/ic_flare_black_24dp"
android:title="Dos" />
<item
android:id="@+id/tres"
android:icon="@drawable/ic_motorcycle_black_24dp"
android:title="Tres" />
<item
android:id="@+id/cautro"
android:icon="@drawable/ic_toys_black_24dp"
android:title="Cautro" />
</menu>
IКонечно, также нужно было добавить изображения в Drawable здесь меню для bottom_nav.xml для нижней навигации
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/uno"
android:icon="@drawable/ic_extension_black_24dp"
android:title="Uno" />
<item
android:id="@+id/dos"
android:icon="@drawable/ic_flare_black_24dp"
android:title="Dos" />
<item
android:id="@+id/tres"
android:icon="@drawable/ic_motorcycle_black_24dp"
android:title="Tres" />
<item
android:id="@+id/cautro"
android:icon="@drawable/ic_toys_black_24dp"
android:title="Cautro" />
</menu>
Это в значительной степени это.
То, что я не знаю, как это сделать, это следующее: у меня есть user_menu.xml, к которому я хочу получить доступ через один из значков вкладок из нижней вкладки навигации
Сейчас онитолько вернуть вид. Как получить доступ к скользящему ящику пользователя user_menu только из одного из них? Этот код на самом деле из другого приложения, которое я создал, который использует макет ящика. вот навигация_меню.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/account"
android:icon="@drawable/ic_profile"
android:title="My Profile" />
<item android:id="@+id/settings"
android:icon="@drawable/ic_settings"
android:title="Settings" />
<item android:id="@+id/edit"
android:icon="@drawable/ic_edit"
android:title="Edit" />
</menu>
обычно я использую подобный код в MainActivity.java в методе onCreate
dl = (DrawerLayout)findViewById(R.id.activity_main);
t = new ActionBarDrawerToggle(this, dl, R.string.Open, R.string.Close);
dl.addDrawerListener(t);
t.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Это другое приложение также имеет вложенный навигационный файл_меню.xmlстраницы макета, как это. В этом случае он называется activity_main, поскольку это другое приложение.
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout 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:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_green_dark">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Main"
android:textSize="50dp"
android:id="@+id/textview"
android:layout_marginTop="200dp"
android:layout_marginLeft="130dp" />
</RelativeLayout>
<com.google.android.material.navigation.NavigationView
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:menu="@menu/navigation_menu"
android:layout_gravity="start"
android:id="@+id/nv" />
</androidx.drawerlayout.widget.DrawerLayout>
Я не уверен, как их объединить, чтобы у меня была страница макета со встроенным user_menu, и все же она вызывается, когда вызывается один из нижних значков навигации, который вызывает макет ящикапереключать вместо возврата вид ---- просто сохраняет последний вид