Здесь рассказывается, как создать приложение, которое открывает сайты при нажатии на различные кнопки и меняет масштаб при нажатии на пункты меню. Если у вас нет опыта в создании приложений для Android, рекомендую пройти "курс молодого бойца" (то есть прочитать предыдущие статьи):
Предлагаю ознакомиться с процессом создания приложения:
1. Создать в Android Studio новый проект (Empty Activity) под названием DigestViewer.
2. В новом проекте выберите вкладку "manifests" и откройте файл AndroidManifest.xml;
В файле прописываем права:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
android:usesCleartextTraffic="true"
3. В файле activity_main.xml удалите строки, относящиеся к элементу TextView и вставьте эти:
<WebView>
android:id="@+id/webview_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
</WebView>
4. В файле MainActivity.java удалите все строки, кроме первой, и вставьте:
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import android.annotation.TargetApi;
import android.widget.LinearLayout;
import android.widget.Button;
import android.view.View;
public class MainActivity extends AppCompatActivity {
WebView webView;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
final Activity activity = this;
SharedPreferences sharedPref = activity.getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
// Handle item selection
switch (item.getItemId()) {
case R.id.menu_sc25:
webView.setInitialScale(25);
editor.putInt(getString(R.string.saved_scale), 25);
editor.apply();
return true;
case R.id.menu_sc50:
webView.setInitialScale(50);
editor.putInt(getString(R.string.saved_scale), 50);
editor.apply();
return true;
case R.id.menu_sc100:
webView.setInitialScale(100);
editor.putInt(getString(R.string.saved_scale), 150);
editor.apply();
return true;
case R.id.menu_sc150:
webView.setInitialScale(150);
editor.putInt(getString(R.string.saved_scale), 100);
editor.apply();
return true;
case R.id.menu_sc200:
webView.setInitialScale(200);
editor.putInt(getString(R.string.saved_scale), 200);
editor.apply();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
webView = new WebView(this);
webView.getSettings().setJavaScriptEnabled(true);
final Activity activity = this;
webView.setWebViewClient(new WebViewClient() {
@SuppressWarnings("deprecation")
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
}
@TargetApi(android.os.Build.VERSION_CODES.M)
@Override
public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) {
// Redirect to deprecated method, so you can use it in all SDK versions
onReceivedError(view, rerr.getErrorCode(), rerr.getDescription().toString(), req.getUrl().toString());
}
});
webView.loadUrl("http://www.tablepedia.com/");
webView.setInitialScale(200);
SharedPreferences sharedPref = activity.getPreferences(Context.MODE_PRIVATE);
int actualScale = sharedPref.getInt(getString(R.string.saved_scale), 200);
webView.setInitialScale(actualScale);
//setContentView(webView);
LinearLayout buttonsView = new LinearLayout(this);
buttonsView.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams lp2 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); // Verbose!
lp2.setMargins(0, 0, 0, 0);
lp2.weight = 0.1f; // This is critical. Doesn't work without it.
LinearLayout.LayoutParams lpW = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); // Verbose!
lpW.setMargins(10, 10, 10, 10);
lpW.weight = 1.0f; // This is critical. Doesn't work without it.
/////////////////////////////////////////////////////////
LinearLayout row = new LinearLayout(this);
row.setOrientation(LinearLayout.HORIZONTAL);
row.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
Button btnB = new Button(this);
btnB.setText("<---");
btnB.setTextSize(12);
btnB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
webView.goBack(); ///.loadUrl("http://tablepedia.com/");
}
});
row.addView(btnB, lp2);
Button btnC = new Button(this);
btnC.setText("tablepedia");
btnC.setTextSize(12);
btnC.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
webView.loadUrl("http://www.tablepedia.com/");
}
});
row.addView(btnC, lp2);
Button btnD = new Button(this);
btnD.setText("telepedia");
btnD.setTextSize(12);
btnD.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
webView.loadUrl("http://telepedia.site/");
}
});
row.addView(btnD, lp2);
Button btnE = new Button(this);
btnE.setText("--->");
btnE.setTextSize(12);
btnE.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
webView.goForward();
}
});
row.addView(btnE, lp2);
LinearLayout row2 = new LinearLayout(this);
row2.setOrientation(LinearLayout.HORIZONTAL);
row2.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
Button btnInfo1 = new Button(this);
btnInfo1.setText("nanopedia");
btnInfo1.setTextSize(12);
btnInfo1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
webView.loadUrl("http://nanopedia.site/");
}
});
row2.addView(btnInfo1, lp2);
Button btnInfo2 = new Button(this);
btnInfo2.setTextSize(12);
btnInfo2.setText("ipedia");
btnInfo2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
webView.loadUrl("http://ipedia.site/");
}
});
row2.addView(btnInfo2, lp2);
Button btnInfo3 = new Button(this);
btnInfo3.setTextSize(12);
btnInfo3.setText("citypedia");
btnInfo3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
webView.loadUrl("http://citypedia.site/");
}
});
row2.addView(btnInfo3, lp2);
Button btnInfo4 = new Button(this);
btnInfo4.setText("quatrecoin");
btnInfo4.setTextSize(12);
btnInfo4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
webView.loadUrl("http://www.quatrecoin.com/");
}
});
row2.addView(btnInfo4, lp2);
buttonsView.addView(row, lp2);
buttonsView.addView(webView, lpW);
buttonsView.addView(row2, lp2);
setContentView(buttonsView, lpW);
}
}
5. Создайте файл main_menu.xml в подкаталоге menu каталога res:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_sc25"
android:title="@string/menu_sc25" />
<item android:id="@+id/menu_sc50"
android:title="@string/menu_sc50" />
<item android:id="@+id/menu_sc100"
android:title="@string/menu_sc100" />
<item android:id="@+id/menu_sc150"
android:title="@string/menu_sc150" />
<item android:id="@+id/menu_sc200"
android:title="@string/menu_sc200" />
</menu>
6. Содержимое файла strings.xml должно быть таким:
<resources>
<string name="app_name">DigestViewer</string>
<string name="menu_sc25">25%</string>
<string name="menu_sc50">50%</string>
<string name="menu_sc100">100%</string>
<string name="menu_sc150">150%</string>
<string name="menu_sc200">200%</string>
<string name="saved_scale">save_high</string>
</resources>
7. Теперь можно запускать приложение!