parent
							
								
									e467f7acb3
								
							
						
					
					
						commit
						4f9344714e
					
				@ -0,0 +1,26 @@
 | 
				
			||||
package net.micodes.myapplication;
 | 
				
			||||
 | 
				
			||||
import android.content.Context;
 | 
				
			||||
 | 
				
			||||
import androidx.test.platform.app.InstrumentationRegistry;
 | 
				
			||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
 | 
				
			||||
 | 
				
			||||
import org.junit.Test;
 | 
				
			||||
import org.junit.runner.RunWith;
 | 
				
			||||
 | 
				
			||||
import static org.junit.Assert.*;
 | 
				
			||||
 | 
				
			||||
/**
 | 
				
			||||
 * Instrumented test, which will execute on an Android device.
 | 
				
			||||
 *
 | 
				
			||||
 * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
 | 
				
			||||
 */
 | 
				
			||||
@RunWith(AndroidJUnit4.class)
 | 
				
			||||
public class ExampleInstrumentedTest {
 | 
				
			||||
    @Test
 | 
				
			||||
    public void useAppContext() {
 | 
				
			||||
        // Context of the app under test.
 | 
				
			||||
        Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
 | 
				
			||||
        assertEquals("net.micodes.myapplication", appContext.getPackageName());
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,44 @@
 | 
				
			||||
package net.micodes.myapplication;
 | 
				
			||||
 | 
				
			||||
import android.os.Bundle;
 | 
				
			||||
import android.view.LayoutInflater;
 | 
				
			||||
import android.view.View;
 | 
				
			||||
import android.view.ViewGroup;
 | 
				
			||||
 | 
				
			||||
import androidx.annotation.NonNull;
 | 
				
			||||
import androidx.fragment.app.Fragment;
 | 
				
			||||
import androidx.navigation.fragment.NavHostFragment;
 | 
				
			||||
 | 
				
			||||
import net.micodes.myapplication.databinding.FragmentFirstBinding;
 | 
				
			||||
 | 
				
			||||
public class FirstFragment extends Fragment {
 | 
				
			||||
 | 
				
			||||
    private FragmentFirstBinding binding;
 | 
				
			||||
 | 
				
			||||
    @Override
 | 
				
			||||
    public View onCreateView(
 | 
				
			||||
            @NonNull LayoutInflater inflater, ViewGroup container,
 | 
				
			||||
            Bundle savedInstanceState
 | 
				
			||||
    ) {
 | 
				
			||||
 | 
				
			||||
        binding = FragmentFirstBinding.inflate(inflater, container, false);
 | 
				
			||||
        return binding.getRoot();
 | 
				
			||||
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
 | 
				
			||||
        super.onViewCreated(view, savedInstanceState);
 | 
				
			||||
 | 
				
			||||
        binding.buttonFirst.setOnClickListener(v ->
 | 
				
			||||
                NavHostFragment.findNavController(FirstFragment.this)
 | 
				
			||||
                        .navigate(R.id.action_FirstFragment_to_SecondFragment)
 | 
				
			||||
        );
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    @Override
 | 
				
			||||
    public void onDestroyView() {
 | 
				
			||||
        super.onDestroyView();
 | 
				
			||||
        binding = null;
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,77 @@
 | 
				
			||||
package net.micodes.myapplication;
 | 
				
			||||
 | 
				
			||||
import android.os.Bundle;
 | 
				
			||||
 | 
				
			||||
import com.google.android.material.snackbar.Snackbar;
 | 
				
			||||
 | 
				
			||||
import androidx.appcompat.app.AppCompatActivity;
 | 
				
			||||
 | 
				
			||||
import android.view.View;
 | 
				
			||||
 | 
				
			||||
import androidx.navigation.NavController;
 | 
				
			||||
import androidx.navigation.Navigation;
 | 
				
			||||
import androidx.navigation.ui.AppBarConfiguration;
 | 
				
			||||
import androidx.navigation.ui.NavigationUI;
 | 
				
			||||
 | 
				
			||||
import net.micodes.myapplication.databinding.ActivityMainBinding;
 | 
				
			||||
 | 
				
			||||
import android.view.Menu;
 | 
				
			||||
import android.view.MenuItem;
 | 
				
			||||
 | 
				
			||||
public class MainActivity extends AppCompatActivity {
 | 
				
			||||
 | 
				
			||||
    private AppBarConfiguration appBarConfiguration;
 | 
				
			||||
    private ActivityMainBinding binding;
 | 
				
			||||
 | 
				
			||||
    @Override
 | 
				
			||||
    protected void onCreate(Bundle savedInstanceState) {
 | 
				
			||||
        super.onCreate(savedInstanceState);
 | 
				
			||||
 | 
				
			||||
        binding = ActivityMainBinding.inflate(getLayoutInflater());
 | 
				
			||||
        setContentView(binding.getRoot());
 | 
				
			||||
 | 
				
			||||
        setSupportActionBar(binding.toolbar);
 | 
				
			||||
 | 
				
			||||
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);
 | 
				
			||||
        appBarConfiguration = new AppBarConfiguration.Builder(navController.getGraph()).build();
 | 
				
			||||
        NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
 | 
				
			||||
 | 
				
			||||
        binding.fab.setOnClickListener(new View.OnClickListener() {
 | 
				
			||||
            @Override
 | 
				
			||||
            public void onClick(View view) {
 | 
				
			||||
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
 | 
				
			||||
                        .setAnchorView(R.id.fab)
 | 
				
			||||
                        .setAction("Action", null).show();
 | 
				
			||||
            }
 | 
				
			||||
        });
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    @Override
 | 
				
			||||
    public boolean onCreateOptionsMenu(Menu menu) {
 | 
				
			||||
        // Inflate the menu; this adds items to the action bar if it is present.
 | 
				
			||||
        getMenuInflater().inflate(R.menu.menu_main, menu);
 | 
				
			||||
        return true;
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    @Override
 | 
				
			||||
    public boolean onOptionsItemSelected(MenuItem item) {
 | 
				
			||||
        // Handle action bar item clicks here. The action bar will
 | 
				
			||||
        // automatically handle clicks on the Home/Up button, so long
 | 
				
			||||
        // as you specify a parent activity in AndroidManifest.xml.
 | 
				
			||||
        int id = item.getItemId();
 | 
				
			||||
 | 
				
			||||
        //noinspection SimplifiableIfStatement
 | 
				
			||||
        if (id == R.id.action_settings) {
 | 
				
			||||
            return true;
 | 
				
			||||
        }
 | 
				
			||||
 | 
				
			||||
        return super.onOptionsItemSelected(item);
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    @Override
 | 
				
			||||
    public boolean onSupportNavigateUp() {
 | 
				
			||||
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);
 | 
				
			||||
        return NavigationUI.navigateUp(navController, appBarConfiguration)
 | 
				
			||||
                || super.onSupportNavigateUp();
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,44 @@
 | 
				
			||||
package net.micodes.myapplication;
 | 
				
			||||
 | 
				
			||||
import android.os.Bundle;
 | 
				
			||||
import android.view.LayoutInflater;
 | 
				
			||||
import android.view.View;
 | 
				
			||||
import android.view.ViewGroup;
 | 
				
			||||
 | 
				
			||||
import androidx.annotation.NonNull;
 | 
				
			||||
import androidx.fragment.app.Fragment;
 | 
				
			||||
import androidx.navigation.fragment.NavHostFragment;
 | 
				
			||||
 | 
				
			||||
import net.micodes.myapplication.databinding.FragmentSecondBinding;
 | 
				
			||||
 | 
				
			||||
public class SecondFragment extends Fragment {
 | 
				
			||||
 | 
				
			||||
    private FragmentSecondBinding binding;
 | 
				
			||||
 | 
				
			||||
    @Override
 | 
				
			||||
    public View onCreateView(
 | 
				
			||||
            @NonNull LayoutInflater inflater, ViewGroup container,
 | 
				
			||||
            Bundle savedInstanceState
 | 
				
			||||
    ) {
 | 
				
			||||
 | 
				
			||||
        binding = FragmentSecondBinding.inflate(inflater, container, false);
 | 
				
			||||
        return binding.getRoot();
 | 
				
			||||
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
 | 
				
			||||
        super.onViewCreated(view, savedInstanceState);
 | 
				
			||||
 | 
				
			||||
        binding.buttonSecond.setOnClickListener(v ->
 | 
				
			||||
                NavHostFragment.findNavController(SecondFragment.this)
 | 
				
			||||
                        .navigate(R.id.action_SecondFragment_to_FirstFragment)
 | 
				
			||||
        );
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    @Override
 | 
				
			||||
    public void onDestroyView() {
 | 
				
			||||
        super.onDestroyView();
 | 
				
			||||
        binding = null;
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,19 @@
 | 
				
			||||
<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||
    xmlns:app="http://schemas.android.com/apk/res-auto"
 | 
				
			||||
    android:layout_width="match_parent"
 | 
				
			||||
    android:layout_height="match_parent"
 | 
				
			||||
    app:layout_behavior="@string/appbar_scrolling_view_behavior">
 | 
				
			||||
 | 
				
			||||
    <fragment
 | 
				
			||||
        android:id="@+id/nav_host_fragment_content_main"
 | 
				
			||||
        android:name="androidx.navigation.fragment.NavHostFragment"
 | 
				
			||||
        android:layout_width="0dp"
 | 
				
			||||
        android:layout_height="0dp"
 | 
				
			||||
        app:defaultNavHost="true"
 | 
				
			||||
        app:layout_constraintBottom_toBottomOf="parent"
 | 
				
			||||
        app:layout_constraintEnd_toEndOf="parent"
 | 
				
			||||
        app:layout_constraintStart_toStartOf="parent"
 | 
				
			||||
        app:layout_constraintTop_toTopOf="parent"
 | 
				
			||||
        app:navGraph="@navigation/nav_graph" />
 | 
				
			||||
</androidx.constraintlayout.widget.ConstraintLayout>
 | 
				
			||||
@ -0,0 +1,35 @@
 | 
				
			||||
<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||
<androidx.core.widget.NestedScrollView 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=".FirstFragment">
 | 
				
			||||
 | 
				
			||||
    <androidx.constraintlayout.widget.ConstraintLayout
 | 
				
			||||
        android:layout_width="match_parent"
 | 
				
			||||
        android:layout_height="match_parent"
 | 
				
			||||
        android:padding="16dp">
 | 
				
			||||
 | 
				
			||||
        <Button
 | 
				
			||||
            android:id="@+id/button_first"
 | 
				
			||||
            android:layout_width="wrap_content"
 | 
				
			||||
            android:layout_height="wrap_content"
 | 
				
			||||
            android:text="@string/next"
 | 
				
			||||
            app:layout_constraintBottom_toTopOf="@id/textview_first"
 | 
				
			||||
            app:layout_constraintEnd_toEndOf="parent"
 | 
				
			||||
            app:layout_constraintStart_toStartOf="parent"
 | 
				
			||||
            app:layout_constraintTop_toTopOf="parent" />
 | 
				
			||||
 | 
				
			||||
        <TextView
 | 
				
			||||
            android:id="@+id/textview_first"
 | 
				
			||||
            android:layout_width="wrap_content"
 | 
				
			||||
            android:layout_height="wrap_content"
 | 
				
			||||
            android:layout_marginTop="16dp"
 | 
				
			||||
            android:text="@string/lorem_ipsum"
 | 
				
			||||
            app:layout_constraintBottom_toBottomOf="parent"
 | 
				
			||||
            app:layout_constraintEnd_toEndOf="parent"
 | 
				
			||||
            app:layout_constraintStart_toStartOf="parent"
 | 
				
			||||
            app:layout_constraintTop_toBottomOf="@id/button_first" />
 | 
				
			||||
    </androidx.constraintlayout.widget.ConstraintLayout>
 | 
				
			||||
</androidx.core.widget.NestedScrollView>
 | 
				
			||||
@ -0,0 +1,35 @@
 | 
				
			||||
<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||
<androidx.core.widget.NestedScrollView 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=".SecondFragment">
 | 
				
			||||
 | 
				
			||||
    <androidx.constraintlayout.widget.ConstraintLayout
 | 
				
			||||
        android:layout_width="match_parent"
 | 
				
			||||
        android:layout_height="match_parent"
 | 
				
			||||
        android:padding="16dp">
 | 
				
			||||
 | 
				
			||||
        <Button
 | 
				
			||||
            android:id="@+id/button_second"
 | 
				
			||||
            android:layout_width="wrap_content"
 | 
				
			||||
            android:layout_height="wrap_content"
 | 
				
			||||
            android:text="@string/previous"
 | 
				
			||||
            app:layout_constraintBottom_toTopOf="@id/textview_second"
 | 
				
			||||
            app:layout_constraintEnd_toEndOf="parent"
 | 
				
			||||
            app:layout_constraintStart_toStartOf="parent"
 | 
				
			||||
            app:layout_constraintTop_toTopOf="parent" />
 | 
				
			||||
 | 
				
			||||
        <TextView
 | 
				
			||||
            android:id="@+id/textview_second"
 | 
				
			||||
            android:layout_width="wrap_content"
 | 
				
			||||
            android:layout_height="wrap_content"
 | 
				
			||||
            android:layout_marginTop="16dp"
 | 
				
			||||
            android:text="@string/lorem_ipsum"
 | 
				
			||||
            app:layout_constraintBottom_toBottomOf="parent"
 | 
				
			||||
            app:layout_constraintEnd_toEndOf="parent"
 | 
				
			||||
            app:layout_constraintStart_toStartOf="parent"
 | 
				
			||||
            app:layout_constraintTop_toBottomOf="@id/button_second" />
 | 
				
			||||
    </androidx.constraintlayout.widget.ConstraintLayout>
 | 
				
			||||
</androidx.core.widget.NestedScrollView>
 | 
				
			||||
@ -0,0 +1,10 @@
 | 
				
			||||
<menu 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"
 | 
				
			||||
    tools:context="net.micodes.myapplication.MainActivity">
 | 
				
			||||
    <item
 | 
				
			||||
        android:id="@+id/action_settings"
 | 
				
			||||
        android:orderInCategory="100"
 | 
				
			||||
        android:title="@string/action_settings"
 | 
				
			||||
        app:showAsAction="never" />
 | 
				
			||||
</menu>
 | 
				
			||||
@ -0,0 +1,6 @@
 | 
				
			||||
<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
 | 
				
			||||
    <background android:drawable="@drawable/ic_launcher_background" />
 | 
				
			||||
    <foreground android:drawable="@drawable/ic_launcher_foreground" />
 | 
				
			||||
    <monochrome android:drawable="@drawable/ic_launcher_foreground" />
 | 
				
			||||
</adaptive-icon>
 | 
				
			||||
@ -0,0 +1,6 @@
 | 
				
			||||
<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
 | 
				
			||||
    <background android:drawable="@drawable/ic_launcher_background" />
 | 
				
			||||
    <foreground android:drawable="@drawable/ic_launcher_foreground" />
 | 
				
			||||
    <monochrome android:drawable="@drawable/ic_launcher_foreground" />
 | 
				
			||||
</adaptive-icon>
 | 
				
			||||
@ -0,0 +1,28 @@
 | 
				
			||||
<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||
<navigation 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/nav_graph"
 | 
				
			||||
    app:startDestination="@id/FirstFragment">
 | 
				
			||||
 | 
				
			||||
    <fragment
 | 
				
			||||
        android:id="@+id/FirstFragment"
 | 
				
			||||
        android:name="net.micodes.myapplication.FirstFragment"
 | 
				
			||||
        android:label="@string/first_fragment_label"
 | 
				
			||||
        tools:layout="@layout/fragment_first">
 | 
				
			||||
 | 
				
			||||
        <action
 | 
				
			||||
            android:id="@+id/action_FirstFragment_to_SecondFragment"
 | 
				
			||||
            app:destination="@id/SecondFragment" />
 | 
				
			||||
    </fragment>
 | 
				
			||||
    <fragment
 | 
				
			||||
        android:id="@+id/SecondFragment"
 | 
				
			||||
        android:name="net.micodes.myapplication.SecondFragment"
 | 
				
			||||
        android:label="@string/second_fragment_label"
 | 
				
			||||
        tools:layout="@layout/fragment_second">
 | 
				
			||||
 | 
				
			||||
        <action
 | 
				
			||||
            android:id="@+id/action_SecondFragment_to_FirstFragment"
 | 
				
			||||
            app:destination="@id/FirstFragment" />
 | 
				
			||||
    </fragment>
 | 
				
			||||
</navigation>
 | 
				
			||||
@ -0,0 +1,3 @@
 | 
				
			||||
<resources>
 | 
				
			||||
    <dimen name="fab_margin">48dp</dimen>
 | 
				
			||||
</resources>
 | 
				
			||||
@ -0,0 +1,9 @@
 | 
				
			||||
<resources xmlns:tools="http://schemas.android.com/tools">
 | 
				
			||||
 | 
				
			||||
    <style name="Theme.MyApplication" parent="Base.Theme.MyApplication">
 | 
				
			||||
        <!-- Transparent system bars for edge-to-edge. -->
 | 
				
			||||
        <item name="android:navigationBarColor">@android:color/transparent</item>
 | 
				
			||||
        <item name="android:statusBarColor">@android:color/transparent</item>
 | 
				
			||||
        <item name="android:windowLightStatusBar">?attr/isLightTheme</item>
 | 
				
			||||
    </style>
 | 
				
			||||
</resources>
 | 
				
			||||
@ -0,0 +1,3 @@
 | 
				
			||||
<resources>
 | 
				
			||||
    <dimen name="fab_margin">200dp</dimen>
 | 
				
			||||
</resources>
 | 
				
			||||
@ -0,0 +1,3 @@
 | 
				
			||||
<resources>
 | 
				
			||||
    <dimen name="fab_margin">48dp</dimen>
 | 
				
			||||
</resources>
 | 
				
			||||
@ -0,0 +1,17 @@
 | 
				
			||||
package net.micodes.myapplication;
 | 
				
			||||
 | 
				
			||||
import org.junit.Test;
 | 
				
			||||
 | 
				
			||||
import static org.junit.Assert.*;
 | 
				
			||||
 | 
				
			||||
/**
 | 
				
			||||
 * Example local unit test, which will execute on the development machine (host).
 | 
				
			||||
 *
 | 
				
			||||
 * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
 | 
				
			||||
 */
 | 
				
			||||
public class ExampleUnitTest {
 | 
				
			||||
    @Test
 | 
				
			||||
    public void addition_isCorrect() {
 | 
				
			||||
        assertEquals(4, 2 + 2);
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
@ -1,5 +0,0 @@
 | 
				
			||||
# 小米便签
 | 
				
			||||
 | 
				
			||||
陈欣怡
 | 
				
			||||
 | 
				
			||||
用gradle
 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue