diff --git a/Week_04_Simple_Views_and_Layouts/.md_images/a1.png b/Week_04_Simple_Views_and_Layouts/.md_images/a1.png new file mode 100644 index 0000000..9684e93 Binary files /dev/null and b/Week_04_Simple_Views_and_Layouts/.md_images/a1.png differ diff --git a/Week_04_Simple_Views_and_Layouts/.md_images/a2.png b/Week_04_Simple_Views_and_Layouts/.md_images/a2.png new file mode 100644 index 0000000..5958b4d Binary files /dev/null and b/Week_04_Simple_Views_and_Layouts/.md_images/a2.png differ diff --git a/Week_04_Simple_Views_and_Layouts/.md_images/activity_lifecycle.png b/Week_04_Simple_Views_and_Layouts/.md_images/activity_lifecycle.png new file mode 100644 index 0000000..879f51f Binary files /dev/null and b/Week_04_Simple_Views_and_Layouts/.md_images/activity_lifecycle.png differ diff --git a/Week_04_Simple_Views_and_Layouts/.md_images/basic-lifecycle.png b/Week_04_Simple_Views_and_Layouts/.md_images/basic-lifecycle.png new file mode 100644 index 0000000..f991787 Binary files /dev/null and b/Week_04_Simple_Views_and_Layouts/.md_images/basic-lifecycle.png differ diff --git a/Week_04_Simple_Views_and_Layouts/.md_images/bike.jpg b/Week_04_Simple_Views_and_Layouts/.md_images/bike.jpg new file mode 100644 index 0000000..b2fded0 Binary files /dev/null and b/Week_04_Simple_Views_and_Layouts/.md_images/bike.jpg differ diff --git a/Week_04_Simple_Views_and_Layouts/.md_images/controls.png b/Week_04_Simple_Views_and_Layouts/.md_images/controls.png new file mode 100644 index 0000000..ed2dc02 Binary files /dev/null and b/Week_04_Simple_Views_and_Layouts/.md_images/controls.png differ diff --git a/Week_04_Simple_Views_and_Layouts/.md_images/display.png b/Week_04_Simple_Views_and_Layouts/.md_images/display.png new file mode 100644 index 0000000..cd0ac92 Binary files /dev/null and b/Week_04_Simple_Views_and_Layouts/.md_images/display.png differ diff --git a/Week_04_Simple_Views_and_Layouts/.md_images/done.png b/Week_04_Simple_Views_and_Layouts/.md_images/done.png new file mode 100644 index 0000000..5faac4b Binary files /dev/null and b/Week_04_Simple_Views_and_Layouts/.md_images/done.png differ diff --git a/Week_04_Simple_Views_and_Layouts/.md_images/download.png b/Week_04_Simple_Views_and_Layouts/.md_images/download.png new file mode 100644 index 0000000..0d08032 Binary files /dev/null and b/Week_04_Simple_Views_and_Layouts/.md_images/download.png differ diff --git a/Week_04_Simple_Views_and_Layouts/.md_images/download_finish.png b/Week_04_Simple_Views_and_Layouts/.md_images/download_finish.png new file mode 100644 index 0000000..ad2d5bc Binary files /dev/null and b/Week_04_Simple_Views_and_Layouts/.md_images/download_finish.png differ diff --git a/Week_04_Simple_Views_and_Layouts/.md_images/layout_structure_regions_guidance4.png b/Week_04_Simple_Views_and_Layouts/.md_images/layout_structure_regions_guidance4.png new file mode 100644 index 0000000..7b850bc Binary files /dev/null and b/Week_04_Simple_Views_and_Layouts/.md_images/layout_structure_regions_guidance4.png differ diff --git a/Week_04_Simple_Views_and_Layouts/.md_images/mode_edit.png b/Week_04_Simple_Views_and_Layouts/.md_images/mode_edit.png new file mode 100644 index 0000000..23be431 Binary files /dev/null and b/Week_04_Simple_Views_and_Layouts/.md_images/mode_edit.png differ diff --git a/Week_04_Simple_Views_and_Layouts/.md_images/model_view_controller_2x.png b/Week_04_Simple_Views_and_Layouts/.md_images/model_view_controller_2x.png new file mode 100644 index 0000000..576948a Binary files /dev/null and b/Week_04_Simple_Views_and_Layouts/.md_images/model_view_controller_2x.png differ diff --git a/Week_04_Simple_Views_and_Layouts/.md_images/notes.png b/Week_04_Simple_Views_and_Layouts/.md_images/notes.png new file mode 100644 index 0000000..3d71e13 Binary files /dev/null and b/Week_04_Simple_Views_and_Layouts/.md_images/notes.png differ diff --git a/Week_04_Simple_Views_and_Layouts/.md_images/show.png b/Week_04_Simple_Views_and_Layouts/.md_images/show.png new file mode 100644 index 0000000..b6a051a Binary files /dev/null and b/Week_04_Simple_Views_and_Layouts/.md_images/show.png differ diff --git a/Week_04_Simple_Views_and_Layouts/.md_images/ui-controls.png b/Week_04_Simple_Views_and_Layouts/.md_images/ui-controls.png new file mode 100644 index 0000000..13534d3 Binary files /dev/null and b/Week_04_Simple_Views_and_Layouts/.md_images/ui-controls.png differ diff --git a/Week_04_Simple_Views_and_Layouts/.md_images/volvo.png b/Week_04_Simple_Views_and_Layouts/.md_images/volvo.png new file mode 100644 index 0000000..862e599 Binary files /dev/null and b/Week_04_Simple_Views_and_Layouts/.md_images/volvo.png differ diff --git a/Week_04_Simple_Views_and_Layouts/MyActivity/.gitignore b/Week_04_Simple_Views_and_Layouts/MyActivity/.gitignore new file mode 100644 index 0000000..39fb081 --- /dev/null +++ b/Week_04_Simple_Views_and_Layouts/MyActivity/.gitignore @@ -0,0 +1,9 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures +.externalNativeBuild diff --git a/Week_04_Simple_Views_and_Layouts/MyActivity/.idea/compiler.xml b/Week_04_Simple_Views_and_Layouts/MyActivity/.idea/compiler.xml new file mode 100644 index 0000000..96cc43e --- /dev/null +++ b/Week_04_Simple_Views_and_Layouts/MyActivity/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Week_04_Simple_Views_and_Layouts/MyActivity/.idea/copyright/profiles_settings.xml b/Week_04_Simple_Views_and_Layouts/MyActivity/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/Week_04_Simple_Views_and_Layouts/MyActivity/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Week_04_Simple_Views_and_Layouts/MyActivity/.idea/gradle.xml b/Week_04_Simple_Views_and_Layouts/MyActivity/.idea/gradle.xml new file mode 100644 index 0000000..7ac24c7 --- /dev/null +++ b/Week_04_Simple_Views_and_Layouts/MyActivity/.idea/gradle.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/Week_04_Simple_Views_and_Layouts/MyActivity/.idea/misc.xml b/Week_04_Simple_Views_and_Layouts/MyActivity/.idea/misc.xml new file mode 100644 index 0000000..44bc9b2 --- /dev/null +++ b/Week_04_Simple_Views_and_Layouts/MyActivity/.idea/misc.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Week_04_Simple_Views_and_Layouts/MyActivity/.idea/modules.xml b/Week_04_Simple_Views_and_Layouts/MyActivity/.idea/modules.xml new file mode 100644 index 0000000..2eabea5 --- /dev/null +++ b/Week_04_Simple_Views_and_Layouts/MyActivity/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Week_04_Simple_Views_and_Layouts/MyActivity/.idea/runConfigurations.xml b/Week_04_Simple_Views_and_Layouts/MyActivity/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/Week_04_Simple_Views_and_Layouts/MyActivity/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/Week_04_Simple_Views_and_Layouts/MyActivity/app/.gitignore b/Week_04_Simple_Views_and_Layouts/MyActivity/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/Week_04_Simple_Views_and_Layouts/MyActivity/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/Week_04_Simple_Views_and_Layouts/MyActivity/app/build.gradle b/Week_04_Simple_Views_and_Layouts/MyActivity/app/build.gradle new file mode 100644 index 0000000..04c05f8 --- /dev/null +++ b/Week_04_Simple_Views_and_Layouts/MyActivity/app/build.gradle @@ -0,0 +1,31 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 26 + buildToolsVersion "26.0.0" + defaultConfig { + applicationId "com.example.yang.myactivity" + minSdkVersion 15 + targetSdkVersion 26 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + exclude group: 'com.android.support', module: 'support-annotations' + }) + compile 'com.android.support:appcompat-v7:26.+' + compile 'com.android.support.constraint:constraint-layout:1.0.2' + compile 'com.android.support:support-v4:26.+' + testCompile 'junit:junit:4.12' +} diff --git a/Week_04_Simple_Views_and_Layouts/MyActivity/app/proguard-rules.pro b/Week_04_Simple_Views_and_Layouts/MyActivity/app/proguard-rules.pro new file mode 100644 index 0000000..3048997 --- /dev/null +++ b/Week_04_Simple_Views_and_Layouts/MyActivity/app/proguard-rules.pro @@ -0,0 +1,25 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /home/yang/Android/Sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/Week_04_Simple_Views_and_Layouts/MyActivity/app/src/androidTest/java/com/example/yang/myactivity/ExampleInstrumentedTest.java b/Week_04_Simple_Views_and_Layouts/MyActivity/app/src/androidTest/java/com/example/yang/myactivity/ExampleInstrumentedTest.java new file mode 100644 index 0000000..6c874d4 --- /dev/null +++ b/Week_04_Simple_Views_and_Layouts/MyActivity/app/src/androidTest/java/com/example/yang/myactivity/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.example.yang.myactivity; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumentation test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.example.yang.myactivity", appContext.getPackageName()); + } +} diff --git a/Week_04_Simple_Views_and_Layouts/MyActivity/app/src/main/AndroidManifest.xml b/Week_04_Simple_Views_and_Layouts/MyActivity/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..5ef7b11 --- /dev/null +++ b/Week_04_Simple_Views_and_Layouts/MyActivity/app/src/main/AndroidManifest.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Week_04_Simple_Views_and_Layouts/MyActivity/app/src/main/java/com/example/yang/myactivity/DispalyActivity.java b/Week_04_Simple_Views_and_Layouts/MyActivity/app/src/main/java/com/example/yang/myactivity/DispalyActivity.java new file mode 100644 index 0000000..0e097de --- /dev/null +++ b/Week_04_Simple_Views_and_Layouts/MyActivity/app/src/main/java/com/example/yang/myactivity/DispalyActivity.java @@ -0,0 +1,179 @@ +package com.example.yang.myactivity; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.os.Handler; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +/** + * An example full-screen activity that shows and hides the system UI (i.e. + * status bar and navigation/system bar) with user interaction. + */ +public class DispalyActivity extends AppCompatActivity { + + /** + * Whether or not the system UI should be auto-hidden after + * {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds. + */ + private static final boolean AUTO_HIDE = true; + /** + * If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after + * user interaction before hiding the system UI. + */ + private static final int AUTO_HIDE_DELAY_MILLIS = 3000; + /** + * Some older devices needs a small delay between UI widget updates + * and a change of the status and navigation bar. + */ + private static final int UI_ANIMATION_DELAY = 300; + private final Handler mHideHandler = new Handler(); + /** + * Touch listener to use for in-layout UI controls to delay hiding the + * system UI. This is to prevent the jarring behavior of controls going away + * while interacting with activity UI. + */ + private final View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + if (AUTO_HIDE) { + delayedHide(AUTO_HIDE_DELAY_MILLIS); + } + return false; + } + }; + private TextView textView; + private View mContentView; + private final Runnable mHidePart2Runnable = new Runnable() { + @SuppressLint("InlinedApi") + @Override + public void run() { + // Delayed removal of status and navigation bar + + // Note that some of these constants are new as of API 16 (Jelly Bean) + // and API 19 (KitKat). It is safe to use them, as they are inlined + // at compile-time and do nothing on earlier devices. + mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE + | View.SYSTEM_UI_FLAG_FULLSCREEN + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); + } + }; + private View mControlsView; + private final Runnable mShowPart2Runnable = new Runnable() { + @Override + public void run() { + // Delayed display of UI elements + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.show(); + } + mControlsView.setVisibility(View.VISIBLE); + } + }; + private boolean mVisible; + private final Runnable mHideRunnable = new Runnable() { + @Override + public void run() { + hide(); + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_dispaly); + + mVisible = true; + mControlsView = findViewById(R.id.fullscreen_content_controls); + mContentView = findViewById(R.id.fullscreen_content); + + + // Set up the user interaction to manually show or hide the system UI. + mContentView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + toggle(); + } + }); + + // Upon interacting with UI controls, delay any scheduled hide() + // operations to prevent the jarring behavior of controls going away + // while interacting with the UI. + findViewById(R.id.dummy_button).setOnTouchListener(mDelayHideTouchListener); + + textView = (TextView) findViewById(R.id.fullscreen_content); + StringBuilder messageFromActivity1 = new StringBuilder(); + Intent intent = getIntent(); + Bundle bundle = intent.getExtras(); + messageFromActivity1.append("Make: " + intent.getStringExtra(MainActivity.KEY_MAKE) + System.getProperty("line.separator")); + messageFromActivity1.append("Year: " + intent.getIntExtra(MainActivity.KEY_YEAR, 0) + System.getProperty("line.separator")); + messageFromActivity1.append("Color: " + intent.getStringExtra(MainActivity.KEY_COLOR) + System.getProperty("line.separator")); + messageFromActivity1.append("Note: " + bundle.getString(MainActivity.KEY_NOTE) + System.getProperty("line.separator")); + textView.setText(messageFromActivity1); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + + // Trigger the initial hide() shortly after the activity has been + // created, to briefly hint to the user that UI controls + // are available. + delayedHide(100); + } + + private void toggle() { + if (mVisible) { + hide(); + } else { + show(); + } + } + + private void hide() { + // Hide UI first + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.hide(); + } + mControlsView.setVisibility(View.GONE); + mVisible = false; + + // Schedule a runnable to remove the status and navigation bar after a delay + mHideHandler.removeCallbacks(mShowPart2Runnable); + mHideHandler.postDelayed(mHidePart2Runnable, UI_ANIMATION_DELAY); + } + + @SuppressLint("InlinedApi") + private void show() { + // Show the system bar + mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); + mVisible = true; + + // Schedule a runnable to display UI elements after a delay + mHideHandler.removeCallbacks(mHidePart2Runnable); + mHideHandler.postDelayed(mShowPart2Runnable, UI_ANIMATION_DELAY); + } + + /** + * Schedules a call to hide() in [delay] milliseconds, canceling any + * previously scheduled calls. + */ + private void delayedHide(int delayMillis) { + mHideHandler.removeCallbacks(mHideRunnable); + mHideHandler.postDelayed(mHideRunnable, delayMillis); + } + + public void onReturnClick(View v) { + finish(); + } +} diff --git a/Week_04_Simple_Views_and_Layouts/MyActivity/app/src/main/java/com/example/yang/myactivity/MainActivity.java b/Week_04_Simple_Views_and_Layouts/MyActivity/app/src/main/java/com/example/yang/myactivity/MainActivity.java new file mode 100644 index 0000000..3f9b888 --- /dev/null +++ b/Week_04_Simple_Views_and_Layouts/MyActivity/app/src/main/java/com/example/yang/myactivity/MainActivity.java @@ -0,0 +1,95 @@ +package com.example.yang.myactivity; + +import android.content.Intent; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.EditText; + +public class MainActivity extends AppCompatActivity { + + public static final String KEY_MAKE = "keyMake"; + public static final String KEY_YEAR = "keyYear"; + public static final String KEY_COLOR = "keyColor"; + public static final String KEY_NOTE = "keyNote"; + private static final int REQUEST_EDIT = 1234; + private static final String TAG_LIFECYCLE = "TagLifecycle"; + private EditText editTextMake; + private EditText editTextYear; + private EditText editTextColor; + private EditText editTextNote; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + Log.d(TAG_LIFECYCLE, "In the onCreate() event"); + + editTextMake = (EditText) findViewById(R.id.inputMake); + editTextYear = (EditText) findViewById(R.id.inputYear); + editTextColor = (EditText) findViewById(R.id.inputColor); + editTextNote = (EditText) findViewById(R.id.inputNote); + } + + @Override + public void onStart() { + super.onStart(); + Log.d(TAG_LIFECYCLE, "In the onStart() event"); + } + + @Override + public void onRestart() { + super.onRestart(); + Log.d(TAG_LIFECYCLE, "In the onRestart() event"); + } + + @Override + public void onResume() { + super.onResume(); + Log.d(TAG_LIFECYCLE, "In the onResume() event"); + } + + @Override + public void onPause() { + super.onPause(); + Log.d(TAG_LIFECYCLE, "In the onPause() event"); + } + + @Override + public void onStop() { + super.onStop(); + Log.d(TAG_LIFECYCLE, "In the onStop() event"); + } + + @Override + public void onDestroy() { + super.onDestroy(); + Log.d(TAG_LIFECYCLE, "In the onDestroy() event"); + } + + public void goEdit(View v) { + Intent intentEdit = new Intent(this, NoteEditingActivity.class); + startActivityForResult(intentEdit, REQUEST_EDIT); + } + + public void goDisplay(View v) { + Intent intentDisplay = new Intent(); + intentDisplay.setAction("com.example.jianhuayang.myactivities.ThirdActivity"); + intentDisplay.putExtra(KEY_MAKE, editTextMake.getText().toString()); + intentDisplay.putExtra(KEY_YEAR, Integer.parseInt(editTextYear.getText().toString())); + Bundle bundle = new Bundle(); + bundle.putString(KEY_COLOR, editTextColor.getText().toString()); + bundle.putString(KEY_NOTE, editTextNote.getText().toString()); + intentDisplay.putExtras(bundle); + startActivity(intentDisplay); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == REQUEST_EDIT && resultCode == RESULT_OK) { + editTextNote.setText(data.getData().toString()); + } + super.onActivityResult(requestCode, resultCode, data); + } +} diff --git a/Week_04_Simple_Views_and_Layouts/MyActivity/app/src/main/java/com/example/yang/myactivity/NoteEditingActivity.java b/Week_04_Simple_Views_and_Layouts/MyActivity/app/src/main/java/com/example/yang/myactivity/NoteEditingActivity.java new file mode 100644 index 0000000..17d221a --- /dev/null +++ b/Week_04_Simple_Views_and_Layouts/MyActivity/app/src/main/java/com/example/yang/myactivity/NoteEditingActivity.java @@ -0,0 +1,28 @@ +package com.example.yang.myactivity; + +import android.content.Intent; +import android.net.Uri; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.EditText; + +public class NoteEditingActivity extends AppCompatActivity { + + EditText editText; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_note_editing); + editText = (EditText) findViewById(R.id.inputNote); + } + + public void onDoneClick(View v) { + Intent intent = new Intent(); + Uri uri = Uri.parse(editText.getText().toString()); + intent.setData(uri); + setResult(RESULT_OK, intent); + finish(); + } +} diff --git a/Week_04_Simple_Views_and_Layouts/MyActivity/app/src/main/res/layout/activity_dispaly.xml b/Week_04_Simple_Views_and_Layouts/MyActivity/app/src/main/res/layout/activity_dispaly.xml new file mode 100644 index 0000000..3f18c24 --- /dev/null +++ b/Week_04_Simple_Views_and_Layouts/MyActivity/app/src/main/res/layout/activity_dispaly.xml @@ -0,0 +1,51 @@ + + + + + + + + + + +