Найти тему

Создание приложение для Android c WebView, меню и 8 кнопками. Часть 1

Рис. 1. Приложение для Android c WebView, меню и 8 кнопками (при раскрытом меню).
Рис. 1. Приложение для Android c WebView, меню и 8 кнопками (при раскрытом меню).

Здесь рассказывается, как создать приложение, которое открывает сайты при нажатии на различные кнопки и меняет масштаб при нажатии на пункты меню. Если у вас нет опыта в создании приложений для Android, рекомендую пройти "курс молодого бойца" (то есть прочитать предыдущие статьи):

Написание простого приложения для Android. Часть 1.
Датамайнинг, дайджесты, диалоги, дискуссии27 июля 2022
Написание простого приложения для Android. Часть 2.
Датамайнинг, дайджесты, диалоги, дискуссии29 июля 2022
Написание простого приложения для Android. Часть 3.
Датамайнинг, дайджесты, диалоги, дискуссии1 августа 2022

Предлагаю ознакомиться с процессом создания приложения:

1. Создать в Android Studio новый проект (Empty Activity) под названием DigestViewer.

2. В новом проекте выберите вкладку "manifests" и откройте файл AndroidManifest.xml;

В файле прописываем права:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

android:usesCleartextTraffic="true"

Рис. 2. Файл AndroidManifest.xml.
Рис. 2. Файл AndroidManifest.xml.

3. В файле activity_main.xml удалите строки, относящиеся к элементу TextView и вставьте эти:

<WebView>

android:id="@+id/webview_id"

android:layout_width="match_parent"

android:layout_height="match_parent"

</WebView>

Рис. 3. Файл activity_main.xml.
Рис. 3. Файл activity_main.xml.

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>
Рис. 4. Файл main_menu.xml.
Рис. 4. Файл main_menu.xml.

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. Теперь можно запускать приложение!