Commit be9849d8 authored by YONG-LIN SU's avatar YONG-LIN SU

新增格號 路段選擇

parent ab6b58be
......@@ -6,12 +6,14 @@
<entry key="..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/activity_main.xml" value="0.34375" />
<entry key="..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/activity_t01_bulletin_board.xml" value="0.34375" />
<entry key="..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/activity_t01_import_db.xml" value="0.34375" />
<entry key="..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/activity_t02_select_road.xml" value="0.34375" />
<entry key="..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/activity_t02_select_space.xml" value="0.34375" />
<entry key="..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/activity_t02_select_vehicle_type.xml" value="0.34375" />
<entry key="..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/activity_t02_start.xml" value="0.34375" />
<entry key="..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/recycler_view_bulletin_board_item.xml" value="0.34375" />
<entry key="..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/recycler_view_db_table_item.xml" value="0.33" />
<entry key="..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/recycler_view_item.xml" value="0.34375" />
<entry key="..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/recycler_view_road_item.xml" value="0.34375" />
<entry key="..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/recycler_view_space_item.xml" value="0.24954710144927536" />
<entry key="..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/layout/recycler_view_vehicle_type_item.xml" value="0.34375" />
<entry key="..\:/Users/pp931/Desktop/RD/Projects/NewParkApp/app/src/main/res/mipmap-anydpi-v26/ic_icon_launcher.xml" value="0.2985" />
......
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
......@@ -43,6 +43,8 @@ dependencies {
implementation 'androidx.test:core:1.4.0'
implementation 'androidx.exifinterface:exifinterface:1.3.3'
implementation 'androidx.preference:preference:1.1.1'
implementation 'androidx.navigation:navigation-fragment:2.5.0'
implementation 'androidx.navigation:navigation-ui:2.5.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
......
......@@ -27,7 +27,9 @@
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
tools:targetApi="31">
<activity
android:name=".view.T02SelectRoadActivity"
android:exported="false" />
<activity
android:name=".view.MainActivity"
android:exported="true">
......@@ -37,8 +39,6 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".view.T01SettingActivity"
android:exported="false"
......@@ -56,7 +56,6 @@
<activity
android:name=".view.T02StartActivity"
android:exported="false" />
<activity
android:name=".view.T02SelectVehicleTypeActivity"
android:exported="false" />
......@@ -64,7 +63,6 @@
android:name=".view.T02SelectSpaceActivity"
android:exported="false" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="ecom.android.newparkapp.fileprovider"
......
package ecom.android.newparkapp;
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 ecom.android.newparkapp.databinding.FragmentFirstBinding;
public class FirstFragment extends Fragment {
private FragmentFirstBinding binding;
@Override
public View onCreateView(
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(new View.OnClickListener() {
@Override
public void onClick(View view) {
NavHostFragment.findNavController(FirstFragment.this)
.navigate(R.id.action_FirstFragment_to_SecondFragment);
}
});
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}
\ No newline at end of file
package ecom.android.newparkapp;
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 ecom.android.newparkapp.databinding.FragmentSecondBinding;
public class SecondFragment extends Fragment {
private FragmentSecondBinding binding;
@Override
public View onCreateView(
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(new View.OnClickListener() {
@Override
public void onClick(View view) {
NavHostFragment.findNavController(SecondFragment.this)
.navigate(R.id.action_SecondFragment_to_FirstFragment);
}
});
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}
\ No newline at end of file
package ecom.android.newparkapp.adapter;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListAdapter;
import androidx.recyclerview.widget.RecyclerView;
import ecom.android.newparkapp.databinding.RecyclerViewRoadItemBinding;
import ecom.android.newparkapp.entity.Road;
import ecom.android.newparkapp.entity.Space;
public class SelectRoadAdapter extends ListAdapter<Road, SelectRoadAdapter.SelectRoadViewHolder> {
private final OnItemClickListener onItemClickListener;
public SelectRoadAdapter(OnItemClickListener onItemClickListener) {
super(roadItemCallback);
this.onItemClickListener = onItemClickListener;
}
@NonNull
@Override
public SelectRoadViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
RecyclerViewRoadItemBinding recyclerViewRoadItemBinding = RecyclerViewRoadItemBinding.inflate(LayoutInflater.from(parent.getContext()),parent,false);
return new SelectRoadViewHolder(recyclerViewRoadItemBinding);
}
@Override
public void onBindViewHolder(@NonNull SelectRoadViewHolder holder, int position) {
holder.setBinding(getItem(position),onItemClickListener);
}
public static final DiffUtil.ItemCallback<Road> roadItemCallback = new DiffUtil.ItemCallback<Road>() {
@Override
public boolean areItemsTheSame(@NonNull Road oldItem, @NonNull Road newItem) {
return oldItem.id.equals(newItem.id);
}
@Override
public boolean areContentsTheSame(@NonNull Road oldItem, @NonNull Road newItem) {
return false;
}
};
static class SelectRoadViewHolder extends RecyclerView.ViewHolder {
private final RecyclerViewRoadItemBinding dataBinding;
SelectRoadViewHolder(RecyclerViewRoadItemBinding dataBinding) {
super(dataBinding.getRoot());
this.dataBinding = dataBinding;
}
void setBinding(Road road, OnItemClickListener onItemClickListener){
String roadString = road.id + " " + road.name;
dataBinding.btnSelectRoad.setText(roadString);
dataBinding.btnSelectRoad.setOnClickListener(view -> {
onItemClickListener.onSpaceClick(road);
});
}
}
public interface OnItemClickListener {
void onSpaceClick(Road road);
}
}
......@@ -21,6 +21,12 @@ public interface SpaceDao {
@Query("SELECT * FROM space WHERE id IN (:Ids)")
List<Space> loadAllByIds(int[] Ids);
@Query("SELECT * FROM space WHERE road_id=:RoadIds")
List<Space> loadAllByRoadId(String RoadIds);
@Query("SELECT * FROM space WHERE road_id=:RoadIds")
LiveData<List<Space>> loadAllLiveDataByRoadId(String RoadIds);
@Insert
void insertAll(Space... spaces);
......
......@@ -6,6 +6,7 @@ import androidx.lifecycle.ViewModelProvider;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;
import ecom.android.newparkapp.R;
import ecom.android.newparkapp.databinding.ActivityMainBinding;
......@@ -44,6 +45,11 @@ public class MainActivity extends AppCompatActivity {
private void btnStartOnClicked(){
if (userViewModel.getCurrentUser().getValue() == null){
Toast.makeText(this,"請先設定使用者",Toast.LENGTH_LONG).show();
return;
}
Intent intent = new Intent();
intent.setClass(this, T02StartActivity.class);
intent.putExtra("CurrentUser", userViewModel.getCurrentUser().getValue());
......
package ecom.android.newparkapp.view;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.GridLayoutManager;
import android.content.Intent;
import android.os.Bundle;
import ecom.android.newparkapp.R;
import ecom.android.newparkapp.adapter.SelectRoadAdapter;
import ecom.android.newparkapp.databinding.ActivityT02SelectRoadBinding;
import ecom.android.newparkapp.entity.Road;
import ecom.android.newparkapp.repository.InfoRepository;
public class T02SelectRoadActivity extends AppCompatActivity {
private ActivityT02SelectRoadBinding dataBinding;
private SelectRoadAdapter selectRoadAdapter;
private InfoRepository infoRepository;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dataBinding = DataBindingUtil.setContentView(this, R.layout.activity_t02_select_road);
infoRepository = new InfoRepository(getApplication());
dataBinding.rvRoadOption.setLayoutManager(new GridLayoutManager(this, 2));
selectRoadAdapter = new SelectRoadAdapter(road -> {roadSelected(road);});
infoRepository.roadDao.getAllLiveData().observe(this, roads -> {selectRoadAdapter.submitList(roads);});
dataBinding.rvRoadOption.setAdapter(selectRoadAdapter);
dataBinding.btnSelectRoadBack.setOnClickListener(view -> roadSelected(null));
}
private void roadSelected(Road road){
if (road == null){
setResult(RESULT_CANCELED);
}else {
Intent intent = getIntent();
Bundle bundle = new Bundle();
bundle.putParcelable("Road",road);
intent.putExtras(bundle);
setResult(RESULT_OK, intent);
}
finish();
}
}
\ No newline at end of file
package ecom.android.newparkapp.view;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.ViewModelProvider;
......@@ -8,8 +10,6 @@ import androidx.recyclerview.widget.GridLayoutManager;
import android.content.Intent;
import android.os.Bundle;
import java.util.List;
import ecom.android.newparkapp.R;
import ecom.android.newparkapp.adapter.SelectSpaceAdapter;
import ecom.android.newparkapp.databinding.ActivityT02SelectSpaceBinding;
......@@ -21,21 +21,56 @@ public class T02SelectSpaceActivity extends AppCompatActivity {
private ActivityT02SelectSpaceBinding dataBinding;
private T02SelectSpaceViewModel t02SelectSpaceViewModel;
private SelectSpaceAdapter selectSpaceAdapter;
private ActivityResultLauncher roadResultLauncher;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dataBinding = DataBindingUtil.setContentView(this, R.layout.activity_t02_select_space);
t02SelectSpaceViewModel = new ViewModelProvider(this).get(T02SelectSpaceViewModel.class);
List<Road> roads = getIntent().getParcelableArrayListExtra("RoadList");
List<Space> spaces = getIntent().getParcelableArrayListExtra("SpaceList");
selectSpaceAdapter = new SelectSpaceAdapter(space -> spaceSelected(space));
SelectSpaceAdapter selectSpaceAdapter = new SelectSpaceAdapter(space -> spaceSelected(space));
selectSpaceAdapter.submitList(spaces);
dataBinding.rvSpaceOption.setLayoutManager(new GridLayoutManager(this,3));
dataBinding.rvSpaceOption.setAdapter(selectSpaceAdapter);
t02SelectSpaceViewModel.updateCurrentRoad(null);
eventBinding();
resultLauncherRegister();
observeBinding();
}
private void eventBinding(){
dataBinding.btnSelectSpaceBack.setOnClickListener(view -> spaceSelected(null));
dataBinding.btnSelectRoad.setOnClickListener(view -> btnSelectRoadOnClicked());
}
private void resultLauncherRegister() {
roadResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
if (result.getResultCode() == RESULT_OK && result.getData() != null){
Road selectedRoad = result.getData().getParcelableExtra("Road");
if (selectedRoad != null){
t02SelectSpaceViewModel.updateCurrentRoad(selectedRoad);
}
}
});
}
private void observeBinding(){
t02SelectSpaceViewModel.getCurrentRoad().observe(this, road -> {
String roadString = "";
if (road != null){
roadString = road.id + " "+ road.name;
}
dataBinding.btnSelectRoad.setText(roadString);
});
t02SelectSpaceViewModel.getCurrentSpace().observe(this, spaces -> {selectSpaceAdapter.submitList(spaces);});
}
private void spaceSelected(Space space){
......@@ -50,4 +85,10 @@ public class T02SelectSpaceActivity extends AppCompatActivity {
}
finish();
}
private void btnSelectRoadOnClicked(){
Intent intent = new Intent();
intent.setClass(this, T02SelectRoadActivity.class);
roadResultLauncher.launch(intent);
}
}
\ No newline at end of file
......@@ -14,22 +14,24 @@ import ecom.android.newparkapp.R;
import ecom.android.newparkapp.adapter.SelectVehicleTypeAdapter;
import ecom.android.newparkapp.databinding.ActivityT02SelectVehicleTypeBinding;
import ecom.android.newparkapp.entity.VehicleType;
import ecom.android.newparkapp.repository.InfoRepository;
public class T02SelectVehicleTypeActivity extends AppCompatActivity {
private ActivityT02SelectVehicleTypeBinding dataBinding;
private SelectVehicleTypeAdapter selectVehicleTypeAdapter;
private List<VehicleType> vehicleTypeList;
private InfoRepository infoRepository;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dataBinding = DataBindingUtil.setContentView(this, R.layout.activity_t02_select_vehicle_type);
vehicleTypeList = getIntent().getParcelableArrayListExtra("VehicleTypeList");
infoRepository = new InfoRepository(getApplication());
selectVehicleTypeAdapter = new SelectVehicleTypeAdapter(vehicleType -> vehicleTypeSelected(vehicleType));
selectVehicleTypeAdapter.submitList(vehicleTypeList);
infoRepository.vehicleTypeDao.getAllLiveData().observe(this, vehicleTypes -> {selectVehicleTypeAdapter.submitList(vehicleTypes);});
dataBinding.rvSelectOption.setLayoutManager(new GridLayoutManager(this,2));
dataBinding.rvSelectOption.setAdapter(selectVehicleTypeAdapter);
......
......@@ -35,9 +35,6 @@ public class T02StartActivity extends AppCompatActivity {
private ActivityResultLauncher vehicleTypeResultLauncher;
private ActivityResultLauncher spaceResultLauncher;
private List<VehicleType> vehicleTypes;
private List<Road> roads;
private List<Space> spaces;
private User currentUser;
@Override
protected void onCreate(Bundle savedInstanceState) {
......@@ -86,26 +83,14 @@ public class T02StartActivity extends AppCompatActivity {
}
private void observeBinding(){
t02StartViewModel.getVehicleTypes().observe(this, vehicleTypes -> {this.vehicleTypes = vehicleTypes;});
t02StartViewModel.getRoads().observe(this, roads -> {this.roads = roads;});
t02StartViewModel.getSpaces().observe(this, spaces -> {this.spaces = spaces;});
}
}
private void btnParkingSpaceOnClicked(){
Intent intent = new Intent();
Bundle bundle = new Bundle();
intent.setClass(this, T02SelectSpaceActivity.class);
if (roads == null || spaces == null){
Toast.makeText(this, "請先匯入道路及車格資料", Toast.LENGTH_SHORT).show();
return;
}
bundle.putParcelableArrayList("RoadList", new ArrayList<>(roads));
bundle.putParcelableArrayList("SpaceList", new ArrayList<>(spaces));
intent.putExtras(bundle);
spaceResultLauncher.launch(intent);
......@@ -115,11 +100,6 @@ public class T02StartActivity extends AppCompatActivity {
Intent intent = new Intent();
Bundle bundle = new Bundle();
intent.setClass(this, T02SelectVehicleTypeActivity.class);
if (vehicleTypes == null){
Toast.makeText(this, "請先匯入車種資料", Toast.LENGTH_SHORT).show();
return;
}
bundle.putParcelableArrayList("VehicleTypeList", new ArrayList<>(vehicleTypes));
intent.putExtras(bundle);
vehicleTypeResultLauncher.launch(intent);
}
......
......@@ -5,14 +5,44 @@ import android.icu.text.IDNA;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MediatorLiveData;
import androidx.lifecycle.MutableLiveData;
import java.lang.invoke.MutableCallSite;
import java.util.List;
import ecom.android.newparkapp.entity.Road;
import ecom.android.newparkapp.entity.Space;
import ecom.android.newparkapp.repository.InfoRepository;
public class T02SelectSpaceViewModel extends AndroidViewModel {
private InfoRepository infoRepository;
private LiveData<List<Space>> spaces;
private LiveData<List<Road>> roads;
private MutableLiveData<Road> currentRoad = new MutableLiveData<>();
private MutableLiveData<List<Space>> currentSpace = new MutableLiveData<>();
public T02SelectSpaceViewModel(@NonNull Application application) {
super(application);
infoRepository = new InfoRepository(application);
spaces = infoRepository.spaceDao.getAllLiveData();
roads = infoRepository.roadDao.getAllLiveData();
}
public LiveData<List<Space>> getSpaces(){return spaces;}
public LiveData<List<Road>> getRoads(){return roads;}
public void updateCurrentRoad(Road road){
if (road == null){
currentRoad.setValue(null);
currentSpace.setValue(infoRepository.spaceDao.getAll());
}else {
currentRoad.setValue(road);
currentSpace.setValue(infoRepository.spaceDao.loadAllByRoadId(road.id));
}
}
public LiveData<Road> getCurrentRoad(){return currentRoad;}
public LiveData<List<Space>> getCurrentSpace(){return currentSpace;}
}
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="horizontal"
android:paddingStart="0dp"
android:paddingEnd="5dp">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.25"
android:gravity="center|center_vertical"
android:text="路段"
android:textSize="30sp" />
<Button
android:id="@+id/btn_select_road_back"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.75"
android:text="@string/label_back"
android:textSize="30sp" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_road_option"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.1"
tools:listitem="@layout/recycler_view_road_item"
tools:spanCount="2"
tools:layoutManager="GridLayoutManager" />
</LinearLayout>
</layout>
\ No newline at end of file
......@@ -5,6 +5,10 @@
<data>
<import type="ecom.android.newparkapp.entity.VehicleType"/>
<import type="ecom.android.newparkapp.entity.Space"/>
<import type="ecom.android.newparkapp.entity.Road"/>
<import type="ecom.android.newparkapp.entity.SpaceStatus"/>
<import type="ecom.android.newparkapp.entity.SpaceRate"/>
<import type="ecom.android.newparkapp.entity.SpaceType"/>
<variable
name="t02StartViewModel"
type="ecom.android.newparkapp.viewModel.T02StartViewModel" />
......@@ -200,7 +204,7 @@ tools:layout_editor_absoluteY="25dp">
android:layout_weight="0.17"
android:gravity="center"
android:textSize="21sp"
android:text="@{t02StartViewModel.currentCase.road.name}"/>
android:text="@{t02StartViewModel.currentCase.space.road.name}"/>
</LinearLayout>
<LinearLayout
......
<?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_t02_select_road"
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>
\ No newline at end of file
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".FirstFragment">
<TextView
android:id="@+id/textview_first"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_first_fragment"
app:layout_constraintBottom_toTopOf="@id/button_first"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button_first"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/next"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/textview_first" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SecondFragment">
<TextView
android:id="@+id/textview_second"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/button_second"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button_second"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/previous"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/textview_second" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<Button
android:id="@+id/btn_select_road"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="C876"
android:textSize="20dp">
</Button>
</layout>
\ No newline at end of file
<?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="ecom.android.newparkapp.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="ecom.android.newparkapp.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>
\ No newline at end of file
<resources>
<dimen name="fab_margin">48dp</dimen>
</resources>
\ No newline at end of file
<resources>
<dimen name="fab_margin">200dp</dimen>
</resources>
\ No newline at end of file
<resources>
<dimen name="fab_margin">48dp</dimen>
</resources>
\ No newline at end of file
<resources>
<dimen name="fab_margin">16dp</dimen>
</resources>
\ No newline at end of file
......@@ -69,4 +69,13 @@
<string name="label_connect_success">"%s 連接成功!"</string>
<string name="label_connect_failed">"%s 連接失敗……"</string>
<string name="no_plate_message">偵測不到車牌</string>
<string name="title_activity_t02_select_road">T02SelectRoadActivity</string>
<!-- Strings used for fragments for navigation -->
<string name="first_fragment_label">First Fragment</string>
<string name="second_fragment_label">Second Fragment</string>
<string name="next">Next</string>
<string name="previous">Previous</string>
<string name="hello_first_fragment">Hello first fragment</string>
<string name="hello_second_fragment">Hello second fragment. Arg: %1$s</string>
</resources>
\ No newline at end of file
......@@ -13,4 +13,13 @@
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
<style name="NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment