diff --git a/app.apk b/app.apk index 81bf18d..f2fe5db 100644 Binary files a/app.apk and b/app.apk differ diff --git a/main/assets/about.htm b/main/assets/about.htm index 810a8b2..e269293 100644 --- a/main/assets/about.htm +++ b/main/assets/about.htm @@ -20,7 +20,7 @@ p { text-indent:2em; }

自动安装apk包

获取网页图标

更新日志:

-

V3.12 (2019-02-19)

  1. 支持跨域。
  2. 获取网页图标。
+

V3.12 (2019-02-25)

  1. 支持跨域。
  2. 获取网页图标。
  3. 屏蔽百度首页视频百度好看跳转下载。
  4. Android API 19 以上开启调试,运行 adb devices 连接手机,Chrome 浏览器 chrome://inspect 查看。

V3.11 (2019-02-13)

  1. 链接中的关键字屏蔽、高亮可设置。

V3.10 (2019-02-10)

  1. 增加:收藏前修改,收藏后修改,修改校验。

V3.9 (2018-12-20)

  1. 视频独立播放JS读不到iframe里的video,使用跳转iframe代替。
diff --git a/main/java/com/hty/browser/FavoriteActivity.java b/main/java/com/hty/browser/FavoriteActivity.java index 6d3a0e3..f76f164 100644 --- a/main/java/com/hty/browser/FavoriteActivity.java +++ b/main/java/com/hty/browser/FavoriteActivity.java @@ -10,9 +10,11 @@ import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.os.Bundle; +import android.os.Handler; +import android.os.Message; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; @@ -23,160 +25,238 @@ import android.view.View; import android.view.View.OnCreateContextMenuListener; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; +import android.webkit.WebIconDatabase; import android.widget.AdapterView; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; import android.widget.EditText; +import android.widget.ImageButton; +import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.SimpleCursorAdapter; import android.widget.TextView; import android.widget.Toast; +import java.io.IOException; +import java.io.InputStream; import java.lang.reflect.Field; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; public class FavoriteActivity extends Activity { - SimpleCursorAdapter adapter; - ListView listView; - EditText editText; + SimpleCursorAdapter adapter; + ListView listView; + EditText editText; InputMethodManager IMM; + ImageButton imageButton_clear; + WebIconDatabase WID; - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_favorite); + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_favorite); getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); - editText = (EditText) findViewById(R.id.editText); + editText = (EditText) findViewById(R.id.editText); editText.addTextChangedListener(new EditChangedListener()); listView = (ListView) findViewById(R.id.listView1); + imageButton_clear = (ImageButton) findViewById(R.id.imageButton_clear); + imageButton_clear.setOnClickListener(new ButtonListener()); + imageButton_clear.setVisibility(View.GONE); search(editText.getText().toString()); IMM = (InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE); - } + WID = WebIconDatabase.getInstance(); + WID.open(getDir("icons", MODE_PRIVATE).getPath()); + } - @Override - public boolean onContextItemSelected(MenuItem item) { - AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo(); - switch (item.getItemId()) { - case 0: - ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); - String url = ((TextView) menuInfo.targetView.findViewById(R.id.website)).getText().toString(); - cm.setPrimaryClip(ClipData.newPlainText("link", url)); - Toast.makeText(getApplicationContext(), "链接已复制", Toast.LENGTH_SHORT).show(); - break; - case 1: - int id = Integer.parseInt(((TextView) menuInfo.targetView.findViewById(R.id.id)).getText().toString()); - DBHelper helper = new DBHelper(getApplicationContext()); - helper.del(id); - Cursor c = helper.query(editText.getText().toString()); - String[] from = { "_id", "title", "website" }; - int[] to = { R.id.id, R.id.title, R.id.website }; - adapter = new SimpleCursorAdapter(this, R.layout.favorite_row, c, from, to, 0); - listView.setAdapter(adapter); - break; - case 2: - final String sid = ((TextView) menuInfo.targetView.findViewById(R.id.id)).getText().toString(); - final String stitle = ((TextView) menuInfo.targetView.findViewById(R.id.title)).getText().toString(); - final String surl = ((TextView) menuInfo.targetView.findViewById(R.id.website)).getText().toString(); - LinearLayout layout = new LinearLayout(FavoriteActivity.this); - layout.setOrientation(LinearLayout.VERTICAL); - final EditText ET_title = new EditText(FavoriteActivity.this); - ET_title.setHint("标题"); - ET_title.setText(stitle); - layout.addView(ET_title); - final EditText ET_url = new EditText(FavoriteActivity.this); - ET_title.setHint("网址"); - ET_url.setText(surl); - layout.addView(ET_url); - AlertDialog.Builder builder = new AlertDialog.Builder(FavoriteActivity.this); - builder.setIcon(android.R.drawable.btn_star_big_on); - builder.setTitle("修改收藏"); - builder.setView(layout); - builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - String stitle = ET_title.getText().toString(); - String surl = ET_url.getText().toString(); - Field field = null; - try { - //通过反射获取dialog中的私有属性mShowing - field = dialog.getClass().getSuperclass().getDeclaredField("mShowing"); - field.setAccessible(true);//设置该属性可以访问 - } catch (Exception ex) { + class ButtonListener implements View.OnClickListener { + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.imageButton_clear: + editText.setText(""); + break; + } + } + } - } - if (!stitle.equals("") && surl.startsWith("http")) { - DBHelper dbHelper = new DBHelper(getApplicationContext()); - SQLiteDatabase db = dbHelper.getWritableDatabase(); - ContentValues values = new ContentValues(); - values.put("website", surl); - values.put("title", stitle); - db.update(DBHelper.TableName, values, "_id = " + sid, null); - IMM.hideSoftInputFromWindow(ET_title.getWindowToken(), 0); - Cursor c = dbHelper.query(editText.getText().toString()); - String[] from = { "_id", "title", "website" }; - int[] to = { R.id.id, R.id.title, R.id.website }; - adapter = new SimpleCursorAdapter(FavoriteActivity.this, R.layout.favorite_row, c, from, to, 0); - listView.setAdapter(adapter); + @Override + public boolean onContextItemSelected(MenuItem item) { + AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo(); + switch (item.getItemId()) { + case 0: + ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); + String url = ((TextView) menuInfo.targetView.findViewById(R.id.website)).getText().toString(); + cm.setPrimaryClip(ClipData.newPlainText("link", url)); + Toast.makeText(getApplicationContext(), "链接已复制", Toast.LENGTH_SHORT).show(); + break; + case 1: + int id = Integer.parseInt(((TextView) menuInfo.targetView.findViewById(R.id.id)).getText().toString()); + DBHelper helper = new DBHelper(getApplicationContext()); + helper.del(id); + search(editText.getText().toString()); + break; + case 2: + final String sid = ((TextView) menuInfo.targetView.findViewById(R.id.id)).getText().toString(); + final String stitle = ((TextView) menuInfo.targetView.findViewById(R.id.title)).getText().toString(); + final String surl = ((TextView) menuInfo.targetView.findViewById(R.id.website)).getText().toString(); + LinearLayout layout = new LinearLayout(FavoriteActivity.this); + layout.setOrientation(LinearLayout.VERTICAL); + final EditText ET_title = new EditText(FavoriteActivity.this); + ET_title.setHint("标题"); + ET_title.setText(stitle); + layout.addView(ET_title); + final EditText ET_url = new EditText(FavoriteActivity.this); + ET_title.setHint("网址"); + ET_url.setText(surl); + layout.addView(ET_url); + AlertDialog.Builder builder = new AlertDialog.Builder(FavoriteActivity.this); + builder.setIcon(android.R.drawable.btn_star_big_on); + builder.setTitle("修改收藏"); + builder.setView(layout); + builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + String stitle = ET_title.getText().toString(); + String surl = ET_url.getText().toString(); + Field field = null; + try { + //通过反射获取dialog中的私有属性mShowing + field = dialog.getClass().getSuperclass().getDeclaredField("mShowing"); + field.setAccessible(true);//设置该属性可以访问 + } catch (Exception ex) { + + } + if (!stitle.equals("") && (surl.startsWith("http") || !surl.startsWith("file:///"))) { + DBHelper dbHelper = new DBHelper(getApplicationContext()); + SQLiteDatabase db = dbHelper.getWritableDatabase(); + ContentValues values = new ContentValues(); + values.put("website", surl); + values.put("title", stitle); + db.update(DBHelper.TableName, values, "_id = " + sid, null); + IMM.hideSoftInputFromWindow(ET_title.getWindowToken(), 0); + search(editText.getText().toString()); + try { + //关闭 + field.set(dialog, true); + dialog.dismiss(); + } catch (Exception ex) { + } + } else { + if (stitle.equals("")){ + ET_title.setError("标题不能为空!"); + } + if (!surl.startsWith("http") || !surl.startsWith("file:///")){ + ET_url.setError("网址错误!"); + } + try { + //设置dialog不可关闭 + field.set(dialog, false); + dialog.dismiss(); + } catch (Exception ex) { + } + } + } + }); + builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + IMM.hideSoftInputFromWindow(ET_title.getWindowToken(), 0); + Field field = null; + try { + //通过反射获取dialog中的私有属性mShowing + field = dialog.getClass().getSuperclass().getDeclaredField("mShowing"); + field.setAccessible(true);//设置该属性可以访问 + } catch (Exception ex) { + } try { - //关闭 field.set(dialog, true); dialog.dismiss(); } catch (Exception ex) { } - } else { - if (stitle.equals("")){ - ET_title.setError("标题不能为空!"); - } - if (!surl.startsWith("http")){ - ET_url.setError("网址错误!"); - } - try { - //设置dialog不可关闭 - field.set(dialog, false); - dialog.dismiss(); - } catch (Exception ex) { - } } - } - }); - builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - IMM.hideSoftInputFromWindow(ET_title.getWindowToken(), 0); - Field field = null; - try { - //通过反射获取dialog中的私有属性mShowing - field = dialog.getClass().getSuperclass().getDeclaredField("mShowing"); - field.setAccessible(true);//设置该属性可以访问 - } catch (Exception ex) { - } - try { - field.set(dialog, true); - dialog.dismiss(); - } catch (Exception ex) { - } - } - }); - builder.create().show(); - break; - } - return true; - } + }); + builder.create().show(); + break; + } + return true; + } - public void favback(View v) { + public void favback(View v) { IMM.hideSoftInputFromWindow(editText.getWindowToken(), 0); - finish(); - } + finish(); + } - void search(String s) { + void search(String s) { DBHelper helper = new DBHelper(this); Cursor c = helper.query(s); - String[] from = { "_id", "title", "website" }; - int[] to = { R.id.id, R.id.title, R.id.website }; + String[] from = { "_id", "title", "website", "website" }; + int[] to = { R.id.id, R.id.title, R.id.website, R.id.imageView_favicon }; adapter = new SimpleCursorAdapter(this, R.layout.favorite_row, c, from, to, 0); + adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder(){ + public boolean setViewValue(View view, Cursor cursor, int columnIndex){ + //Log.e("L192", view.toString() + columnIndex); + if(view.getId() == R.id.imageView_favicon){ + String website = cursor.getString(columnIndex); + // if (website.startsWith("https://")) { + // //((ImageView) view).setImageResource(android.R.drawable.ic_secure); + // Runner1 r1 = new Runner1(); + // r1.setUrl("https://static.easyicon.net/preview/52/523893.gif"); + // r1.setView(view); + // Thread thread1 = new Thread(r1); + // thread1.start(); + // return true; + // } else if (website.startsWith("http://")) { + // // ((ImageView) view).setImageResource(android.R.drawable.ic_partial_secure); + // Runner1 r1 = new Runner1(); + // r1.setUrl("https://static.easyicon.net/preview/1/11847.gif"); + // r1.setView(view); + // Thread thread1 = new Thread(r1); + // thread1.start(); + // return true; + // } else { + // ((ImageView) view).setImageResource(R.drawable.network); + // return true; + // } + Runner1 r1 = new Runner1(); + r1.setUrl(website); + r1.setView(view); + Thread thread1 = new Thread(r1); + thread1.start(); + return true; + } + return false; + } + }); listView.setAdapter(adapter); - listView.setDivider(new ColorDrawable(Color.GREEN)); - listView.setDividerHeight(2); + + // WebIconDatabase WID = WebIconDatabase.getInstance(); + // WID.open(getDir("icons", MODE_PRIVATE).getPath()); + // for (int i=0; i arg0, View arg1, int arg2, long arg3) { @@ -200,6 +280,7 @@ public class FavoriteActivity extends Activity { menu.add(0, 2, 2, "修改"); } }); + } class EditChangedListener implements TextWatcher { @@ -216,8 +297,81 @@ public class FavoriteActivity extends Activity { @Override public void afterTextChanged(Editable s) { - search(s.toString()); + if(s.toString().equals("")){ + imageButton_clear.setVisibility(View.GONE); + }else{ + imageButton_clear.setVisibility(View.VISIBLE); + } + search(s.toString()); } } -} + public Bitmap webBitMap(String surl) { + URL url = null; + Bitmap bitmap = null; + try { + url = new URL(surl); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + try { + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setDoInput(true); + conn.connect(); + InputStream IS = conn.getInputStream(); + bitmap = BitmapFactory.decodeStream(IS); + IS.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return bitmap; + } + + class Runner1 implements Runnable { + private String surl; + private View view; + + private void setUrl(String surl1) { + surl = surl1; + } + + private void setView(View view1) { + view = view1; + } + + public void run() { + // Bitmap bitmap = webBitMap(surl); + // Message msg = new Message(); + // Bundle bundle = new Bundle(); + // bundle.putParcelable("bitmap", bitmap); + // msg.setData(bundle); + // msg.obj = view; + // handler.sendMessage(msg); + Log.e("L350", surl); + WID.requestIconForPageUrl(surl, new WebIconDatabase.IconListener() { + public void onReceivedIcon(String url, Bitmap icon) { + Log.e("L353", url); + Message msg = new Message(); + Bundle bundle = new Bundle(); + bundle.putParcelable("bitmap", icon); + msg.setData(bundle); + msg.obj = view; + handler.sendMessage(msg); + } + }); + } + } + + static Handler handler = new Handler(){ + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + Bundle bundle = msg.getData(); + Bitmap bitmap = bundle.getParcelable("bitmap"); + View view = (View) msg.obj; + Log.e("L372", "setIcon"); + ((ImageView) view).setImageBitmap(bitmap); + } + }; + +} \ No newline at end of file diff --git a/main/java/com/hty/browser/MainActivity.java b/main/java/com/hty/browser/MainActivity.java index d320c3d..6225927 100644 --- a/main/java/com/hty/browser/MainActivity.java +++ b/main/java/com/hty/browser/MainActivity.java @@ -41,6 +41,7 @@ import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.os.AsyncTask; +import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.os.Looper; @@ -165,7 +166,7 @@ public class MainActivity extends Activity { findClose.setOnClickListener(new ButtonListener()); editText1 = (EditText) findViewById(R.id.EditText1); webView1 = (WebView) findViewById(R.id.WebView1); - WebIconDatabase.getInstance().open(getDir("icons", MODE_PRIVATE).getPath()); //获取favicon图标路径 + WebIconDatabase.getInstance().open(getDir("icons", MODE_PRIVATE).getPath()); //获取图标数据库路径 registerForContextMenu(webView1); // 开启JS webView1.getSettings().setJavaScriptEnabled(true); @@ -196,13 +197,17 @@ public class MainActivity extends Activity { webView1.requestFocusFromTouch(); // 允许跨域 webView1.getSettings().setAllowUniversalAccessFromFileURLs(true); + // 允许调试 + if(Build.VERSION.SDK_INT >= 19) { + webView1.setWebContentsDebuggingEnabled(true); + } webView1.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Log.e("OverrideUrlLoading", url); // 协议过滤 - if(url.startsWith("http")){ + if(url.startsWith("http") && !url.startsWith("https://cdn-haokanapk.baidu.com/")){ view.loadUrl(url); } /* @@ -220,13 +225,16 @@ public class MainActivity extends Activity { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { - super.onPageStarted(view, url, favicon); + //super.onPageStarted(view, url, favicon); editText1.setText(url); urln = url; btnBack.setEnabled(true); IMM.hideSoftInputFromWindow(editText1.getWindowToken(), 0); pgb1.setVisibility(View.VISIBLE); imageButton_info.setImageResource(android.R.drawable.ic_menu_info_details); +// if(favicon != null) { +// imageButton_info.setImageBitmap(favicon); +// } } @Override @@ -318,10 +326,7 @@ public class MainActivity extends Activity { // 接收网站图标(favicon) public void onReceivedIcon(WebView view, Bitmap icon) { - Matrix matrix = new Matrix(); - matrix.postScale((float)60 / icon.getWidth(), (float)60 / icon.getHeight()); - Bitmap bitmap = Bitmap.createBitmap(icon, 0, 0, icon.getWidth(), icon.getHeight(), matrix, true); - imageButton_info.setImageBitmap(bitmap); + imageButton_info.setImageBitmap(icon); } // 播放网络视频时全屏会被调用的方法 @@ -552,7 +557,6 @@ public class MainActivity extends Activity { @Override public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { Log.e("Download", url); - //if(!url.contains("baidu.com")) downloadBySystem(url, "", ""); } } @@ -563,16 +567,19 @@ public class MainActivity extends Activity { WebView w = (WebView) v; HitTestResult result = w.getHitTestResult(); HTRE = result.getExtra(); + menu.setHeaderIcon(android.R.drawable.ic_menu_report_image); menu.setHeaderTitle(HTRE); if (result.getType() == HitTestResult.IMAGE_TYPE || result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE) { + menu.setHeaderIcon(android.R.drawable.ic_menu_gallery); // Context menu items do not support icons menu.add(0, 0, 0, "查看图片"); menu.add(0, 1, 1, "复制图片"); - menu.add(0, 2, 2, "保存图片"); + menu.add(0, 2, 2, "保存图片").setIcon(android.R.drawable.ic_menu_save); // Context menu items do not support icons menu.add(0, 3, 3, "复制链接"); menu.add(0, 4, 4, "屏蔽图片"); menu.add(0, 5, 5, "隐藏图片"); } if (result.getType() == HitTestResult.SRC_ANCHOR_TYPE) { + menu.setHeaderIcon(android.R.drawable.ic_menu_sort_alphabetically); menu.add(0, 2, 2, "下载"); menu.add(0, 3, 3, "复制链接"); } @@ -806,7 +813,8 @@ public class MainActivity extends Activity { Matrix matrix = new Matrix(); matrix.postScale((float)100/icon.getWidth(), (float)100/icon.getHeight()); Bitmap bitmap = Bitmap.createBitmap(icon, 0, 0, icon.getWidth(), icon.getHeight(), matrix, true); - builder.setIcon(new BitmapDrawable(getResources(), bitmap)); + BitmapDrawable drawable = new BitmapDrawable(getResources(), bitmap); + builder.setIcon(drawable); builder.setTitle("添加收藏"); builder.setView(layout); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @@ -822,7 +830,7 @@ public class MainActivity extends Activity { } catch (Exception ex) { } - if (!stitle.equals("") && surl.startsWith("http")) { + if (!stitle.equals("") && (surl.startsWith("http") || surl.startsWith("file:///"))) { DBHelper helper = new DBHelper(getApplicationContext()); Cursor c = helper.query(surl); if (c.getCount() == 0) { @@ -844,7 +852,7 @@ public class MainActivity extends Activity { if (stitle.equals("")){ ET_title.setError("标题不能为空!"); } - if (!surl.startsWith("http")){ + if (!surl.startsWith("http") || !surl.startsWith("file:///")){ ET_url.setError("网址错误!"); } try { @@ -1106,9 +1114,9 @@ public class MainActivity extends Activity { } // 调用系统下载,https://www.jianshu.com/p/6e38e1ef203a - private void downloadBySystem(String url, String contentDisposition, String mimeType) { + private void downloadBySystem(String surl, String contentDisposition, String mimeType) { // 指定下载地址 - DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); + DownloadManager.Request request = new DownloadManager.Request(Uri.parse(surl)); // 允许媒体扫描,根据下载的文件类型被加入相册、音乐等媒体库 request.allowScanningByMediaScanner(); // 设置通知的显示类型,下载进行时和完成后显示通知 @@ -1116,27 +1124,27 @@ public class MainActivity extends Activity { // 设置通知栏的标题,如果不设置,默认使用文件名 // request.setTitle("This is title"); // 设置通知栏的描述 - // request.setDescription("This is description"); + request.setDescription(surl); // 允许在计费流量下下载 request.setAllowedOverMetered(false); // 允许该记录在下载管理界面可见 - request.setVisibleInDownloadsUi(true); + //request.setVisibleInDownloadsUi(true); // 允许漫游时下载 request.setAllowedOverRoaming(true); // 允许下载的网路类型 request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI); // 设置下载文件保存的路径和文件名 - String fileName = URLUtil.guessFileName(url, contentDisposition, mimeType); + String fileName = URLUtil.guessFileName(surl, contentDisposition, mimeType); Log.e("fileName:", fileName); request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName); // 自定义下载路径 - // request.setDestinationUri() - // request.setDestinationInExternalFilesDir() + //request.setDestinationUri(); + //request.setDestinationInExternalFilesDir(); DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); // 添加一个下载任务 long downloadId = downloadManager.enqueue(request); Log.e("downloadId:", downloadId+""); - if(url == urlUpdate){ + if(surl == urlUpdate){ downloadIdUpdate = downloadId; } } diff --git a/main/res/layout/activity_favorite.xml b/main/res/layout/activity_favorite.xml index c14ecb9..b9677f3 100644 --- a/main/res/layout/activity_favorite.xml +++ b/main/res/layout/activity_favorite.xml @@ -1,6 +1,7 @@ - + - + android:gravity="center" + android:orientation="horizontal" + android:paddingLeft="10dp" + android:paddingRight="10dp"> + + + + + + android:layout_height="wrap_content" + android:divider="#ccc" + android:dividerHeight="1dp" + android:paddingLeft="10dp" + android:paddingRight="10dp"> + + + \ No newline at end of file diff --git a/main/res/layout/activity_main.xml b/main/res/layout/activity_main.xml index c77dddd..a44048c 100644 --- a/main/res/layout/activity_main.xml +++ b/main/res/layout/activity_main.xml @@ -44,11 +44,10 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/LinearLayout1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:paddingLeft="5dp" + android:paddingRight="5dp"> - + - + android:layout_weight="5" + android:orientation="vertical"> - + + + + + + + \ No newline at end of file