顯示具有 Android 標籤的文章。 顯示所有文章
顯示具有 Android 標籤的文章。 顯示所有文章

2024年10月15日 星期二

Html - Padding 和 Margin 有什麼差異 What's different Padding and Margin ?

目的

在開發前端頁面時候,我們常常會遇到 Padding 或是 Merge,功能都是間距不是嗎?
為了能夠讓各位能夠理解這兩個屬性我們就來分析吧

分析表


Feature Padding (內邊距) Margin (外邊距)
功能 控制 內容 與 邊框 之間的距離 控制 元素 與 其他元素 之間的距離
位置 在邊框內部,包圍內容 在邊框外部,包圍整個元素
影響背景顏色 會繼承元素的背景顏色 不影響(完全透明)
是否改變元素尺寸 是,會讓元素變大 否,不會改變元素本身的尺寸
應用範例 加文字與邊框的間距,避免內容擁擠 增加元素之間的距離,讓佈局更整齊
CSS 語法範例 padding: 20px; margin: 10px;
影響其他元素布局 不會影響周圍元素 會影響相鄰元素的距離

Padding vs Margin


結論

Padding:對內間距
Margin:對外間距

歡迎轉載,請註明出處。

2020年2月14日 星期五

Android-Ads SDK was initialized incorrectly

最近心血來潮
想把很久沒在維護的專案持續改良
結果在 Build 過程中竟然發現有 Ads 報出來的錯誤
讓我整個驚呆了

*****************************************************************************
* The Google Mobile Ads SDK was initialized incorrectly. AdMob publishers    
* should follow the instructions here:                                       
* https://googlemobileadssdk.page.link/admob-android-update-manifest         
* to add a valid App ID inside the AndroidManifest.                          
* Google Ad Manager publishers should follow instructions here:              
* https://googlemobileadssdk.page.link/ad-manager-android-update-manifest.   
*****************************************************************************

以上的錯誤是因為 Ads 為了有效驗證應用程式的資料
所以在 Google Mobile Ads SDK version 17.0.0

1 . com.google.android.gms.ads.APPLICATION_ID







2 . com.google.android.gms.ads.AD_MANAGER_APP






異動後結果:








參考資料:Mobile Ads SDK (Android) Get Started
參考資料:Ads SDK Get Start

2020年2月1日 星期六

Android-AndroidStudio 無法執行Git

不知道各位大大在 AndroidStudio 開發時
有突然發現到以下訊息 : Cannot Run Git







後續進行測試也發現無法執行測試動作且出現以下訊息:
xcrun: error: invalid active developer path
(/Library/Developer/CommandLineTools), missing
xcrun at:
/Library/Developer/CommandLineTools/usr/bin/xcrun







因為更新 Mac OS 導致一些開發指令失效
所以我們開啟終端機且輸入以下命定
進行更新動作

xcode-select --install









這樣就正常運行囉




2019年9月14日 星期六

Android-使用 Bottomnavigationview 遇到的問題

為了能夠讓使用者能有更好的使用操作
大多介面有分側邊展開或者上、下選單式
但這次要介紹的是在選單式( Bottomnavigationview )
以下是比較常遇到的問題:

1 . 只想要圖片不要文字 ( Title )









2 . 自訂一般圖片、選定圖片
在建立 drawable/icon_menu_i_24dp.xml ( example )

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="false" android:drawable="@mipmap/tab_a2"/>
    <item android:state_checked="true" android:drawable="@mipmap/tab_a1"/>
</selector>







歡迎轉載,請註明出處。

2019年9月1日 星期日

Android-Gradle 更新導致 Manifest 錯誤

近期開始更新頗舊的 App
不更新還好
一更新就爆出一堆錯誤
以下用來記錄 Gradle 更新後 Manefest 相關的錯訊息

結果錯誤訊息說:

Manifest merger failed with multiple errors, see logs

天呀,之前沒看過的地方
原來是 Android Studio 在 3.X 版有提供新的介面來讓開發者除錯
那個地方就在 AndroidManifest.xml 底下
有 Tab & Merged Manifest 切換按鈕
















歡迎轉載,請註明出處。


2019年6月23日 星期日

Android-Android 套件升級導致 UI 元件失效

因近期升級至 Android X
導致部分原有的 UI 元件失效
在此紀錄有異動的項目
官方說明列表有很清楚的對照表
以下為之前遇到的在此紀錄
import android.support.v4.app.Fragment;

To

import androidx.fragment.app.Fragment;

---------------------------------------

import androidx.annotation.Nullable; 

To 

import androidx.annotation.Nullable;
---------------------------------------

import android.support.v7.app.AppCompatActivity;

To

import androidx.appcompat.app.AppCompatActivity; 
---------------------------------------
androidx.constraintlayout.ConstraintLayout

To

androidx.constraintlayout.widget.ConstraintLayout
---------------------------------------
android.support.constraint.ConstraintLayout

To

android.coordinatorlayout.widget.ConstraintLayout
---------------------------------------
android.support.v7.widget.CardView
To
androidx.cardview.widget.CardView

參考資料:Migrating to AndroidX

2019年6月2日 星期日

Android-新 Google Play icon design specifications

在 Google 發佈新的 App 最重要的就是讓人第一眼能讓人識別的 ICon 囉
為了能夠統一規範
Google 近期發布最新的規範請開發者務必遵照
因為現在發布的圖片皆會被 Google 動態修改囉

因 Google 有發布最新網格佈局
希望各個美術創作者依照此佈局盡情的創作

基本規範如下:

  • Final size: 512px x 512px
  • Format: 32-bit PNG
  • Color space: sRGB
  • Max file size: 1024KB
  • Shape: Full square – Google Play dynamically handles masking. Radius will be equivalent to 20% of icon size.
  • Shadow: None – Google Play dynamically handles shadows. See 'Shadows' section below on including shadows within your artwork.



















參考資料 : Google Play icon design specifications

2019年5月19日 星期日

Android-Properties 存取配置參數

想必各位開發者有過因為開發環境和正式環境時常交換
所以必須拉出一個設定檔案來作切換
我們這次來寫一個讀取設定檔案的參數

步驟流程:
1 . 將設定檔放至指定路徑
2 . 設置存取方法

圖文步驟 :
1 . 在專案指定路徑下建立 assets ( 完成路徑 : src/main/assets )
2 . 建立剛剛路徑下建立 config.properties 檔案











3 . 編寫檔案內容










4 . 編寫程式碼存取內容














Properties mProperties = new Properties();
try {
    mProperties.load(this.getAssets().open("config.properties"));
    String ip = mProperties.getProperty("ip");
    System.out.println("IP : " + ip);
} catch (IOException e) {
    e.printStackTrace();
}


參考資料:Properties
參考資料:Can't use fonts in my project: - “Error:Error: The file name must end with .xml”

2019年3月23日 星期六

Android-停止放送GoogleAdMod廣告

這幾天突然收到廣告被莫名停止發送的信件突然驚嚇到
不是都官方提供的資源嗎?
為什麼還會被卡掉...



以下為真實內容:
------------------------------------------
您好:

這封電子郵件是為了通知您,您有一個應用程式目前違反了 AdMob 計劃政策,因此廣告已停止在該應用程式中放送。

問題編號:123456789

已停止放送廣告的應用程式:com.sample.activity

必須採取的行動:檢查帳戶中所有其他應用程式是否遵守政策。

目前的帳戶狀態:有效


違規情形說明

Google Play 除名處分:我們嚴禁 AdMob 發佈商濫用任何 Google 產品 (如 Google Play、YouTube 和 Blogger) 或宣傳這類濫用行為。濫用行為包括規避這些或其他 Google 產品的政策或條款,以及提供規避方法,例如讓使用者能下載 YouTube 影片。

如果 Google Play 政策執行小組將您的應用程式移除,請到這裡通知 Google Play。如果 Google Play 將您的應用程式復權,請向本小組提出申訴。


必須採取的行動:檢查帳戶是否遵守政策

雖然以上應用程式已停止放送廣告,但您的 AdMob 帳戶仍然有效。建議您抽空檢查其他應用程式以確保它們符合我們的政策,並且據此持續監控應用程式,降低再次收到違規電子郵件的可能性。此外也請注意,如果您還是繼續違規,我們隨時有權將您的帳戶停用。


申訴
若要針對本次停用提出申訴,請在透過申訴表單提出申訴以前,先前往應用程式商店為您的應用程式更新必要項目。請注意,如果我們找不到更新的應用程式,就無法評估您的情況。此外,若您曾為了符合計劃政策而對應用程式或帳戶做出調整,建議藉此機會一併說明。

感謝您的配合。

祝一切順心!

Google AdMob 小組敬上
------------------------------------------

這時有請Google大神
但幾乎得到的回應皆是不太良好的
但實際去申請看看吧

請依照以下步驟:
1 . 要先確認收到以上通知信件
2 . 接下來去申訴此問題:提出政策違規申訴
3 . 在申訴表單填寫相關內容,尤其最後的說明一定要確實填寫






















4 . 發送訊息
5 . 耐心等候信件( 約2-3天 )
6 . 依照您發送說明回饋結果~
以下為真實內容:
------------------------------------------
您好:

感謝您按照我們的政策要求修改應用程式,我們已經恢復在您的應用程式中放送廣告了。請注意,由於我們先前已暫時停止在您的應用程式中放送廣告,因此廣告可能要過一段時間才會恢復顯示。感謝您的耐心配合。

發佈商編號:ca-app-pub-1234455666
應用程式編號:com.sample.activity

根據 AdMob 條款及細則,發佈商必須遵守 AdMob 發佈商指南與政策,以及 AdSense 計劃政策。日後若要有效避免違反政策,建議您參閱上述參考資料,以便維持帳戶的良好信譽。

------------------------------------------
參考資料:





2019年2月28日 星期四

Android-無法更新 Kotlin 1.3.21

不知道各位大大在更新到 Kotlin 時
是否有發現最新本版本是 : 1.3.21
但是更新 Gradle 始終無法正常更新
一直出現以下錯誤訊息:

ERROR: Failed to resolve: org.jetbrains.kotlin:kotlin-stdlib-jre7:1.3.21


原來發現自從 Kotlin : 1.2.71 之後就不在更新了
而是改用 "jdk" 這字取代 :
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"








資料來源:https://stackoverflow.com/questions/53448450/how-to-resolve-error-failed-to-resolve-org-jetbrains-kotlinkotlin-stdlib-jre7

歡迎轉載,請註明出處。

2019年2月24日 星期日

Android-AndroidStudio mac 無法抓到 Git 指定路徑

各位大大在幫 AndroidStudio 安裝 Git 時
是否會發現明明安裝完 Git
卻一直出現

xcrun: error: invalid active developer path, missing xcrun

這字樣

首先我們先按照步驟
1 . xcode-select --install
2 . sudo xcode-select -switch /

參考資料:https://www.jianshu.com/p/50b6771eb853


2018年10月18日 星期四

Android-使用API取得資料出現org.apache.http.ProtocolVersion

尚未整理

隨著資安意識抬頭
在網路連線的功能也需更加的強化
在最近開發的過程中
直接使用 SDK 28 版本
在開發的過程中竟然發生以下的錯誤

java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion;
at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:109)
at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:97)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:114)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.ProtocolVersion" .......]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:109)
at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:97)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:114)
Suppressed: java.io.IOException: No original dex files found for dex location /data/app/.....split_lib_resources_apk.apk
at dalvik.system.DexFile.openDexFileNative(Native Method)
at dalvik.system.DexFile.openDexFile(DexFile.java:354)











這看似已經存在的竟然找不到(張大眼睛
那如果直接跳過?

<uses-library
android:name="org.apache.http.legacy"
android:required="false" />

竟然又出現錯誤
java.io.IOException: Cleartext HTTP traffic to -.- not permitted







看起來有進展
但是看似不被允許

結果去官方找答案 : 網路安全性設定
原來是有關安全性的問題,解法 :
非常的不建議此方法
因為有可能連到您不知道的位址
結果遭受到攻擊

<application
android:icon="@mipmap/ic_launcher"
android:usesCleartextTraffic="true">
<activity android:name=".LinePermissionActivity">
.
.
.
</application>













參考資料:Android 8: Cleartext HTTP traffic not permitted

2018年9月28日 星期五

Android-Android Console 隱私權政策

20190316 新增隱私權規章來源:
(部分收費) FreePrivacyPolicy 如果有GPS、adMob...就需要額外加錢
(免費) 簡易版本
(免費) termly
(免費) getterms
除了 FreePrivacyPolicy 有憑證連結,其餘需自行找地方存放


這幾天收到 Google 通知信
如下:













簡單來說
辛辛苦苦做出來的應用程式暫時不會出現在商店了

問題是以下到底是?
違反 Android 廣告 ID 的使用方式政策和開發人員發佈協議第 4.8 條的規定

可能有的問題 :
1 . 有新的問券調查












2 . 那就和我一樣沒有設定隱私政策連結
(os : 目前不提交隱私權政策網址這選項是...?)
















請到此連結創立關於您應用軟體對應憑證( 免費版本皆可 ):privacypolicies












填完內容後回出現此,並且將並且將此路徑貼至隱私政策連結即可












請務必好好保留此資料


參考資料:Privacypolicies

2018年9月16日 星期日

Android-換頁特效

各位在開發頁面過程中
一定多多少少聽到換頁、轉頁這樣的抱怨

能有啥麼特效可以呈現 ?
這是什麼使用者體驗 ?
一堆讓人滿頭問號的 What...

今天就來寫簡單的範例讓大家秒懂
此篇以左右滑動特效為例子

公式圖表 :
















先想 A 頁面位移量為多少
再想 B 頁面位移量為多少



















1 . 先創立 res/anim folder













2 . 建立特效
A頁面主頁滑至左底<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="500"
        android:fromXDelta="0%p"
        android:toXDelta="-100%p" />
</set>
B頁面右底滑至主頁
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
    android:duration="500"
    android:fromXDelta="100%p"
    android:toXDelta="0%p" />
</set>

3 . 立即將此風格套用在 Style.xml 上吧
<style name="transitionPage" style="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/open_in_from_right</item>
<item name="android:activityOpenExitAnimation">@anim/open_out_from_left</item>
<item name="android:activityCloseEnterAnimation">@anim/close_in_from_left</item>
<item name="android:activityCloseExitAnimation">@anim/close_out_from_right</item>
</style>

<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">    .
    .
    <item name="android:windowAnimationStyle">@style/transitionPage</item>    .
</style>

參考資料:设置Activity退出动画无效问题的解决

2018年9月15日 星期六

Android-如何用Kotlin簡易設定與監聽按鈕(Button)

想必各位大大從 Java 轉到 Kotlin 有極大的痛楚
此篇就以現在常遇到的狀況下做簡易的介紹

首先我們先把一般情況下的
先把頁面畫出來





















1 . activity_button.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">

    <Button
        android:id="@+id/buttonTest"
        android:layout_width="88dp"
        android:layout_height="48dp"
        android:layout_marginBottom="232dp"
        android:layout_marginEnd="148dp"
        android:layout_marginStart="148dp"
        android:layout_marginTop="231dp"
        android:text="我是按鈕"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

重點來了
以下是 Java 寫法 :
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class ButtonJavaActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btnTest;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnTest = findViewById(R.id.buttonTest);
        btnTest.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.buttonTest:
                Toast.makeText(this, "Test", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
    }
}

以下是 Kotlin 寫法 :
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.view.View
import android.widget.Button
import android.widget.Toast

class ButtonActivity : AppCompatActivity(), View.OnClickListener {

    private lateinit var btnTest: Button;

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_button)

        btnTest = findViewById(R.id.buttonTest);
        btnTest.setOnClickListener(this);
        
    }

    override fun onClick(v: View?) {
        when (v?.id) {
            R.id.buttonTest -> {
                Toast.makeText(this, "Test", Toast.LENGTH_SHORT).show();
            }
            else -> {

            }
        }
    }
}

Android-新建專案畫面佈局確有問題

在新建專案時想必第一個想法是
直接執行就可以跑在模擬器上了阿

剛開始我也是這樣想
但是自從換電腦後
又是另一回事了
一開啟畫面時馬上出現

Render problem
-Failed to load AppCompat ActionBar with unknown error.

The following classes could not be instantiated:
- android.support.v7.widget.ActionBarContainer (Open Class, Show Exception, Clear Cache)
- android.support.v7.widget.ActionBarContextView (Open Class, Show Exception, Clear Cache)
- android.support.v7.app.WindowDecorActionBar (Open Class, Show Exception, Clear Cache)















看起來並不單純了
東翻西找後
結果發現直接把 Style 修改成
Base.Theme.AppCompat.Light.DarkActionBar













這樣就能順利進行下面的開發了

歡迎轉載,請記得註明出處。


Android-無法開啟 AndroidStudio 模擬器

不知道各位大大是否有在新的電腦安裝 AndroidStudio
卻無法開啟模擬器的尷尬情況
錯誤訊息為 :

Emulator: emulator: 
ERROR: x86 emulation currently requires hardware acceleration!

然後依照以下的步驟卻一樣的情況發生 :

1 . SDK Tool 下載 Intel X86 Emulator Accelerator(HAXM installer)
















2 . 然後去 Sdk -> extras -> intel -> Hardware_Accelerated_Execution_Manager
安裝 intelhaxm-android.exe















然後沒有動靜,也一樣會出現一樣的錯誤...



上網查才發現
這是 Intel 針對虛擬機的一個設定
Intel VT-d(Intel Virtualization Technology for Directed I/O)
提供虛擬機一個強大的平台
為了避免使用者沒真正的在使用
所以預設都是為關閉的狀態
所以開發者必須要自己去 BIOS 自行該改





















歡迎轉載,請註明出處。

2018年7月22日 星期日

Kotlin-變數初始值 lateinit 與 ?= 與 lazy

不曉得個外大大在用 Kotlin 開發 Android 時候
是否有發現為啥無法想 Java 定義一個變數就好
反而還要在定義其他的屬性

我們先來看有哪幾種
1 . lateinit
此宣告是指,晚一點初始化
但此變數是不可為 Null 的










2 . ?=
雖然可以為空值
但是審查的條件也變得相對嚴格
要使用底下功能時
都必須要檢查
不然直接報錯










3 .


參考資料:Kotlin —  lateinit vs lazy
參考資料:[android]活动-lateinit VS 任何?= null
參考資料:Kotlin: Lazy 和 Lateinit 的使用
參考資料:Kotlin: When to Use Lazy or Lateinit