рдХрдореА APK рдЖрдХрд╛рд░ (рдЙрдЪрд┐рдд рд╕реАрдорд╛ рдХреЗ рднреАрддрд░)

Habr.com рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдРрд╕рд╛ рд╣реА рд▓реЗрдЦ рдерд╛, рдЬреЛ рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдкреАрдХреЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ 1.5 рдПрдордмреА рд╕реЗ 1757 рдмрд╛рдЗрдЯреНрд╕ рдпрд╛ рдЙрд╕рд╕реЗ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдПрдХ рдЙрдЪрд┐рдд рд╕реАрдорд╛ рддрдХ рдХрдо рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдФрд░ рдХреБрдЫ рд╕реВрдХреНрд╖реНрдорддрд╛рдПрдВ рдФрд░ рдирд┐рд╣рд┐рдд рдХреНрд╖рдгреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рд╣реИред

рд╢реБрд░реБрдЖрдд


рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ, рдЦрд╛рд▓реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдлрд┐рд░, style.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдПрдХреНрд╢рдирдмреЗрд░ рдХреЗ рд╕рд╛рде рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдмрджрд▓реЗрдВ

Theme.AppCompat.Light.DarkActionBar 

ActionBar рдХреЗ рдмрд┐рдирд╛ рдЧрддрд┐рд╡рд┐рдзрд┐ рдкрд░

 Theme.AppCompat.Light.NoActionBar 

рдкрд░рд┐рдгрд╛рдо:

рдЫрд╡рд┐

рдПрдкреАрдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдореЗрдВ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦрддреЗ рд╣реИрдВ:



рддреЛ, рдПрдкреАрдХреЗ рдХрд╛ рд╡рдЬрди 1.5 рдПрдордмреА рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб!" рд╢рдмреНрджреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╕реНрдЯреЗрдЬ рд╡рди (рдЦрдирди)


рдмрд┐рд▓реНрдб.рдЧреНрд░реЗрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

 android { buildTypes { debug { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile ('proguard-android.txt'), 'proguard-rules.pro' } } } 

рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо Android Studio рдХреЛ рд╕рд┐рдВрдХ рдХрд░реЗрдВрдЧреЗред

рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

 minifyEnabled true 
рдЖрд╡реЗрджрди рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрдб рд╣рдЯрд╛ рджреЗрдВ
 shrinkResources true 
рдЕрдкреНрд░рдпреБрдХреНрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдПрдкреАрдХреЗ рд╕реЗ рд╣рдЯрд╛ рджреЗрдВред

рдПрдкреАрдХреЗ рдХрд╛ рд╡рдЬрди 960 рдХреЗрдмреА рд╣реЛ рдЧрдпрд╛, рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реБрдЖред

рдЪрд░рдг рджреЛ (рдХрд╛рд░реНрдпрд╢реАрд▓рддрд╛ рдЬреЛрдбрд╝реЗрдВ)


рд╕рдордЭ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреНрд▓рд┐рдХрд░ред

Activity_main.xml рдХреЛрдб
 <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.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=".MainActivity"> <TextView android:id="@+id/number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="20dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <ImageButton android:id="@+id/imageButton" android:layout_width="90dp" android:layout_height="90dp" android:layout_marginBottom="32dp" android:layout_marginEnd="8dp" android:layout_marginStart="8dp" android:background="#000000FF" android:cropToPadding="false" android:scaleType="fitXY" android:visibility="visible" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:srcCompat="@mipmap/ic_launcher_round" /> </android.support.constraint.ConstraintLayout> 


рдХреЛрдб MainActivity.java
 import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.MotionEvent; import android.view.View; import android.widget.ImageButton; import android.widget.TextView; public class MainActivity extends AppCompatActivity { SharedPreferences Settings; ImageButton button; TextView text; int num = 31; View.OnTouchListener on = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { num--; if(num > 0) { text.setText(Integer.toString(num)); } else { num = 31; text.setText(",   "); } } return false; } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Settings = getSharedPreferences("settings", Context.MODE_PRIVATE); if (Settings.contains("left")) num = Settings.getInt("left", 0); button = findViewById(R.id.imageButton); button.setOnTouchListener(on); text = findViewById(R.id.number); if(num > 0) { text.setText(Integer.toString(num)); } else { num = 31; text.setText(",   "); } } @Override protected void onPause() { super.onPause(); SharedPreferences.Editor editor = Settings.edit(); editor.putInt("left", num); editor.apply(); } } 

рдЖрд╡реЗрджрди рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлреЙрд░реНрдо рдХрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХрд┐рдпрд╛ рд╣реИ:



рдЖрд╡реЗрджрди рдХрд╛ рдЖрдХрд╛рд░ 1.1 рдПрдордмреА, 140 рдХреЗрдмреА рдХреА рд╡реГрджреНрдзрд┐ред

рдЪрд░рдг рддреАрди (android.support рдФрд░ AppCompat рд╣рдЯрд╛рдПрдВ)


рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдПрдкреАрдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдирд┐рдореНрди рджрд┐рдЦрд╛рддрд╛ рд╣реИ:



public class MainActivity extends AppCompatActivity рд╕рд╛рде public class MainActivity extends Activity рдореЗрдВ public class MainActivity extends Activity рдХрд╛ public class MainActivity extends Activity ред Alt + Enter рджрдмрд╛рдХрд░ Android рд╕реНрдЯреВрдбрд┐рдпреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░рд┐рдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░реЗрдВред

рдЖрд╡реЗрджрди рдХрд╛ рдЖрдХрд╛рд░ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди ...



рдмрдЯрди рдХрд╣рд╛рдВ рд╣реИ?

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд╣реИ, рд╡рд╣ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдиреА рд░рд╣реАред рд▓реЗрдХрд┐рди рдЙрд╕рдХреЗ рдкрд╛рд╕ рд╕рд┐рд░реНрдл рдПрдХ рддрд╕реНрд╡реАрд░ рдирд╣реАрдВ рд╣реИред

Activity_main.xml рдкрд░ рдЬрд╛рдПрдВ, рдиреАрдЪреЗ рдХреА рд░реЗрдЦрд╛ рдвреВрдВрдвреЗрдВ

 app:srcCompat="@mipmap/ic_launcher_round" 

рдФрд░ рдЗрд╕реЗ рдмрджрд▓ рджреЗрдВ

 android:src="@mipmap/ic_launcher_round" 

рдЕрдм рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ:



рд▓реЗрдХрд┐рди рдЖрдХрд╛рд░ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред

рд╣рдо рдлрд┐рд░ рд╕реЗ build.gradle рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдмреНрд▓реЙрдХ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддреЗ рд╣реИрдВ:

 dependencies { } 

рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рд╕рд┐рдВрдХ рдХрд░реЗрдВ ... рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдеред

1. рд░рд┐рдЬ / рдорд╛рди / рд╕реНрдЯрд╛рдЗрд▓.рдПрдХреНрд╕рдПрдордПрд▓ рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЗрд╕рдХреА рд╕рднреА рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЛ рдирд┐рдореНрди рдХреЛрдб рд╕реЗ рдмрджрд▓реЗрдВ:

 <resources> <style name="AppTheme" parent="android:Theme.DeviceDefault.NoActionBar"> </style> </resources> 

2. рдХрд╛рдВрд╕реНрдЯреНрд░реЗрдиреНрдбрд▓реАрдЯрд╛рдЙрдЯ, рдЬреЛ рдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, android.support рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА dependencies рдмреНрд▓реЙрдХ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЙрдиреНрдЯреНрд░рд╛рдЯреНрд░рд╛рдЗрдирд▓рдЖрдЙрдЯ рдХреЛ RelativeLayout рд╕реЗ рдмрджрд▓ рджреЗрдВрдЧреЗ, рдЬреЛ рдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИред

Activity_main.xml рдХреЛрдб:
 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF"> <TextView android:id="@+id/number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="Hello World!" android:textSize="20dp" /> <ImageButton android:id="@+id/imageButton" android:layout_width="90dp" android:layout_height="90dp" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="32dp" android:background="#000000FF" android:scaleType="fitXY" android:src="@mipmap/ic_launcher_round" android:visibility="visible" /> </RelativeLayout> 


рд╣рдо рдПрдкреАрдХреЗ рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрддреЗ рд╣реИрдВ:



рд╣рдорд╛рд░реЗ рдПрдкреАрдХреЗ рдХрд╛ рд╡рдЬрди 202 KB рд╣реИ, рдЬреЛ рдЕрдкрдиреЗ рдореВрд▓ рдЖрдХрд╛рд░ рд╕реЗ 7.5 рдЧреБрдирд╛ рдЫреЛрдЯрд╛ рд╣реИред

рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЙрдирд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред

1. Res / drawable рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣рдЯрд╛рдПрдВ рдФрд░ res / mipmap рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░реЗрдВ
2. рдЕрдкрдирд╛ рдЖрдЗрдХрди рдФрд░ рдмрдЯрди рдЦреАрдВрдЪреЗрдВ, рдлрд┐рд░ ImageOptim рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░реЗрдВред

рдмрдЯрди:



рдЖрдЗрдХрди:



3. рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЪреБрдиреЗрдВ, Ctrl + C рджрдмрд╛рдПрдВ, Android Studio рдкрд░ рдЬрд╛рдПрдВ, Res / drawable рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ Ctrl + V рджрдмрд╛рдПрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░реЗрдЧрд╛ рдЬрд╣рд╛рдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИ рдЙрдирдХреА рдЕрдиреБрдорддрд┐ рд╕реЗред

рдбреНрд░рд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рдЖрдк Refactor -> рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрдЗрдХрди рдХрд╛ рдирд╛рдо i.png, b.png рдмрдЯрди рдХреЗ рд▓рд┐рдП рдЪрд┐рддреНрд░ рд╣реИ

4. рдЕрдм AndroidManifest.xml рдлрд╝рд╛рдЗрд▓, рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдЬрд╛рдПрдВ

 android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" 

рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

 android:icon="@drawable/i" android:roundIcon="@drawable/i" 

Activity_main.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдлрд╝реАрд▓реНрдб рдХреЛ ImageButton рдореЗрдВ рдмрджрд▓реЗрдВ

 android:src="@mipmap/ic_launcher_round" 

рдкрд░

 android:src="@drawable/b" 

рдкрд░рд┐рдгрд╛рдо


рдХреБрд▓ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ 13.4 KB рд╣реИ, рдЬреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрдХрд╛рд░ рд╕реЗ 112 рдЧреБрдирд╛ рдХрдо рд╣реИ!

рдЕрдВрддрд┐рдо рдХреЛрдб MainActivity.java
 import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.ImageButton; import android.widget.TextView; public class MainActivity extends Activity { SharedPreferences Settings; ImageButton button; TextView text; int num = 31; View.OnTouchListener on = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { num--; if(num > 0) { text.setText(Integer.toString(num)); } else { num = 31; text.setText(",   "); } } return false; } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.m); Settings = getSharedPreferences("settings", Context.MODE_PRIVATE); if (Settings.contains("left")) num = Settings.getInt("left", 0); text = findViewById(R.id.number); button = findViewById(R.id.button); button.setOnTouchListener(on); if(num > 0) { text.setText(Integer.toString(num)); } else { num = 31; text.setText(",  "); } } @Override protected void onPause() { super.onPause(); SharedPreferences.Editor editor = Settings.edit(); editor.putInt("left", num); editor.apply(); } } 


рдкрд░рд┐рдгрд╛рдо рдХреЛрдб activity_main.xml
 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF"> <TextView android:id="@+id/number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="Hello World!" android:textSize="20dp" /> <ImageButton android:id="@+id/button" android:layout_width="90dp" android:layout_height="90dp" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="32dp" android:background="#000000FF" android:scaleType="fitXY" android:src="@drawable/b" android:visibility="visible" /> </RelativeLayout> 


рдпрд╣ рдПрдкреАрдХреЗ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдЙрдЪрд┐рдд рдХрдореА рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рдЕрд╡рд░реЛрдз рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢ рд╣реИред

рд╕рдВрд╕рд╛рдзрди рд╣рдЯрд╛рдПрдВ


AndroidManifest.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ Res / рдорд╛рди рдлрд╝реЛрд▓реНрдбрд░ рд╣рдЯрд╛рдПрдБ, рд╣рдо рдирд┐рдореНрди рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмреНрд▓реЙрдХ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 <application android:icon="@drawable/i" android:roundIcon="@drawable/i" android:label="Clicker" android:theme="@style/android:Theme.DeviceDefault.NoActionBar"> <activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /></intent-filter> </activity> </application> 

рд╣рдо рдПрдХрд▓-рдЕрдХреНрд╖рд░ рд╡рд╛рд▓реЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рднреА рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ, рдЧрддрд┐рд╡рд┐рдзрд┐_main.xml рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ m.xml рдХрд░ рджреЗрддреЗ рд╣реИрдВ

рдХреНрд▓рд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдмрджрд▓реЗрдВ:

рд▓рд╛рдЗрди рдХреЛ рд╣рдЯрд╛ рджреЗрдВ

 button.setOnTouchListener(on); 

рдореЗрдирд▓рд╛рдпрдЯ.рдЬрд╡рд╛ рдореЗрдВред
рдлрд╝рдВрдХреНрд╢рди рдмрджрд▓реЗрдВ

 View.OnTouchListener on = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { num--; if(num > 0) { text.setText(Integer.toString(num)); } else { num = 31; text.setText(",   "); } } return false; } }; 

рдкрд░
 public void o(View v) { num--; if(num > 0) { text.setText(Integer.toString(num)); } else { num = 31; text.setText(",   "); } } 

ImageButton рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ m.xml рдлрд╝рд╛рдЗрд▓ (рдкреВрд░реНрд╡ рдореЗрдВ activity_main) рдореЗрдВ, рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ

 android:onClick="o" 

рдХреБрд▓ рдЖрдХрд╛рд░ 10.2 KB рдерд╛ , рдЬреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрдХрд╛рд░ рд╕реЗ 147 рдЧреБрдирд╛ рдЫреЛрдЯрд╛ рдерд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред



рдХреЛрдб MainActivity.java
 import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.view.View; import android.widget.ImageButton; import android.widget.TextView; public class MainActivity extends Activity { SharedPreferences Settings; ImageButton button; TextView text; int num = 31; public void o(View v) { num--; if(num > 0) { text.setText(Integer.toString(num)); } else { num = 31; text.setText(",   "); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.m); Settings = getSharedPreferences("settings", Context.MODE_PRIVATE); if (Settings.contains("left")) num = Settings.getInt("left", 0); text = findViewById(R.id.n); button = findViewById(R.id.b); if(num > 0) { text.setText(Integer.toString(num)); } else { num = 31; text.setText(",  "); } } @Override protected void onPause() { super.onPause(); SharedPreferences.Editor editor = Settings.edit(); editor.putInt("left", num); editor.apply(); } } 


M.xml рдХреЛрдб
 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF"> <TextView android:id="@+id/n" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:textColor="#000000" android:textSize="20dp" /> <ImageButton android:id="@+id/b" android:layout_width="90dp" android:layout_height="90dp" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="32dp" android:background="#000000FF" android:scaleType="fitXY" android:src="@drawable/b" android:onClick="o" android:visibility="visible" /> </RelativeLayout> 

Source: https://habr.com/ru/post/hi417845/


All Articles