顯示具有 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