මෙම ක්‍රියාකාරකම සමඟ ඔබ තේමාවක් භාවිතා කළ යුතුය.ඇප්කොම්පට් තේමාවක් (හෝ පැවත එන්නන්)


1029

ඇන්ඩ්‍රොයිඩ් ස්ටුඩියෝ 0.4.5

අභිරුචි සංවාද කොටු සෑදීම සඳහා ඇන්ඩ්‍රොයිඩ් ප්‍රලේඛනය: http://developer.android.com/guide/topics/ui/dialogs.html

ඔබට අභිරුචි සංවාදයක් අවශ්‍ය නම්, ඩයලොග් ඒපීඅයි භාවිතා කිරීම වෙනුවට ක්‍රියාකාරකමක් සංවාදයක් ලෙස පෙන්විය හැකිය. ක්‍රියාකාරකමක් නිර්මාණය කර එහි තේමාව <activity>ප්‍රකාශිත අංගයේ තේමාව.හොලෝ ඩයලොග් ලෙස සකසන්න :

<activity android:theme="@android:style/Theme.Holo.Dialog" >

කෙසේ වෙතත්, මම මෙය උත්සාහ කළ විට මට පහත ව්‍යතිරේකය ලැබේ:

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity

මම පහත සඳහන් දෑ සඳහා සහය දක්වන අතර මට විනාඩි 10 ට වඩා වැඩි යමක් භාවිතා කළ නොහැක:

minSdkVersion 10
targetSdkVersion 19

මගේ විලාසිතාවන්හි මට පහත දෑ ඇත:

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

මගේ මැනිෆෙස්ටයේ ක්‍රියාකාරිත්වය සඳහා මෙය මා සතුව ඇත:

 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:theme="@android:style/Theme.Holo.Light.Dialog"
            android:name="com.ssd.register.Dialog_update"
            android:label="@string/title_activity_dialog_update" >
        </activity>

මේ වගේ සංවාද කොටුවක් නිර්මාණය කිරීම මම දැනටමත් බලාපොරොත්තු වූ දෙයක් විය, මන්ද මම දැනටමත් පිරිසැලසුම සම්පූර්ණ කර ඇත්තෙමි.

මට මෙම ගැටලුව මඟහරවා ගත හැක්කේ කෙසේදැයි කිසිවෙකුට පැවසිය හැකිද?


2
Ag රගුනන්දන්, මම මේ සඳහා අළුත් නමුත් මගේ විලාසිතාවන් දෙස බැලීමේදී මට පහත දෑ ඇත: <style name = "AppTheme" parent = "Theme.AppCompat.Light.DarkActionBar"> තවද මට පහත ආනයන ඇත: android.support.v7 ආනයනය කරන්න .app.ActionBarActivity; android.support.v7.app.ActionBar ආයාත කරන්න; android.support.v4.app.Fragment ආයාත කරන්න; නමුත් මේ සියල්ලේ තේරුම කුමක්දැයි විශ්වාස නැත.
ant2009

11
ඔබ භාවිතා කරන AppCompatapi මට්ටමේ 11. යන්තම් භාවිතා පහත සහාය actionbars කිරීමට සහාය පුස්තකාලය පිහිටුවීමට වන android:theme="@style/AppTheme" >මැනිෆෙස්ටයේ ක්රියාකාරකම් සඳහා
Raghunandan

2
@ ant2009, ag ර gh ුනන්දන් පැවසූ දේ පැහැදිලි AndroidManifest.xmlකිරීම සඳහා: ඔබේ ක්‍රියාකාරකම් සඳහා ඔබ නියම කරන තේමාව ඔබේ යෙදුම සඳහා ඔබ නියම කරන තේමාව අභිබවා යයි . ටැගය android:themeවෙතින් රේඛාව ඉවත් කරන්න <activity>.
cryptochronoconolite

3
මෙය කිරීමෙන් දෝෂය ඉවත් වනු ඇති නමුත් සංවාද තේමාවක් සහිත ක්‍රියාකාරකමක් වන ඔහු වීමට කැමති තැනට ඔහුව ගෙන නොයනු ඇත. සාමාන්‍ය රීතිය නම්, ඔබේ ක්‍රියාකාරකමට ක්‍රියාකාරී තීරුවක් අවශ්‍ය නම් එයට AppCompat තේමාව තිබිය යුතු අතර ජාවා කේතය ActionBarActivity දීර් extend කළ යුතුය. ඔබට ක්‍රියාකාරී තීරුවක් අවශ්‍ය නොවන ක්‍රියාකාරකමක් තිබේ නම් (සංවාද තේමාත්මක ක්‍රියාකාරකමක් වැනි) ඔබට එයට ඕනෑම තේමාවක් යෙදිය හැකි නමුත් ජාවා කේතය පැරණි පැරණි ක්‍රියාකාරකම් දීර් extend කළ යුතුය.
බොබ්බේක් 4

1
මම හිතන්නේ මේ අවස්ථාවේ ඇති එකම ගැටළුව ඔබ ඩයලොග් කොන්ත්‍රාත්කරු සඳහා සපයන සන්දර්භයයි. මගේ පිළිතුර බලන්න. stackoverflow.com/a/51574281/232727
විටාලි ඒ

Answers:


1129

ඔබට මෙම ගැටළුව ඇතිවීමට හේතුව, ඔබ සංවාද තේමාව යෙදීමට උත්සාහ කරන ක්‍රියාකාරකම් දීර් ing වීම ActionBarActivityනිසා AppCompatතේමාව යෙදීම අවශ්‍ය වේ.

යාවත්කාලීන කිරීම : දීර් ing කිරීම AppCompatActivityද මෙම ගැටළුව ඇති කරයි

මේ අවස්ථාවේ දී, සිට ජාවා උරුමය වෙනස් ActionBarActivityකිරීමට Activityහා මැනිෆෙස්ටයේ සංවාද තේමාව හැර එය, මෙන් නොවන Theme.AppCompatඅගය


සාමාන්‍ය රීතිය නම්, ඔබේ කේතය ඇන්ඩ්‍රොයිඩ් හි පැරණි අනුවාදයන්ට සහය දැක්වීමට අවශ්‍ය නම්, එයට AppCompatතේමාව තිබිය යුතු අතර ජාවා කේතය දිගු කළ යුතුය AppCompatActivity. ඔබට ඇන්ඩ්‍රොයිඩ් හි නවතම අනුවාදයන් සහ විශේෂාංග ගැන පමණක් සැලකිලිමත් වීම වැනි * මෙම සහය අවශ්‍ය නොවන ක්‍රියාකාරකමක් තිබේ නම්, ඔබට එයට ඕනෑම තේමාවක් යෙදිය හැකි නමුත් ජාවා කේතය පැරණි පැරණි ලෙස දිගු කළ යුතුය Activity.


සටහන: AppCompatActivity(හෝ උප පංතියක ActionBarActivity) සිට Activityවෙනස් වන විට, “සහාය” නොමැතිව විවිධ ඇමතුම් “සහාය” නොමැතිව අනුරූප ඇමතුමට වෙනස් කළ යුතුය . ඉතින්, ඒ වෙනුවට getSupportFragmentManager, අමතන්න getFragmentManager.


6
op යනු appcompat භාවිතා කරන අතර ඔහු දීර් extend කළ යුත්තේ කුමන අවස්ථාවකදීද යන්න ActionBarActivityඔහුගේ ආනයන ප්‍රකාශ වලින් පෙන්නුම් කරන්නේ quesiton ට පහළින් ඇති අදහසයි.
gh ුනන්දන්

2
Ur බර්සොස් ඔබ ඇන්ඩ්‍රොයිඩ් ස්ටුඩියෝ හි නව ව්‍යාපෘතියක් නිර්මාණය කරන විට ඔබ කතා කරන්නේ නම් එය සාමාන්‍ය වින්‍යාසයේ දෝෂයකි.
බොබ්බේක් 4

2
B බොබ්බේක් 4, මට එකම ගැටලුවක් ඇති අතර මෙම විසඳුම මා වෙනුවෙන් වැඩ කළ නොහැක. කාරණය නම් මට ක්‍රියාකාරකම් දීර් extend කළ නොහැකි වීමයි, මන්ද මට පන්ති රාශියක් (සම්පූර්ණ ව්‍යාපෘතියක්) ඇති බැවින් එය ක්‍රියාකාරී බාර් ක්‍රියාකාරීත්වය මත රඳා පවතී. ගැටලුවට වෙනත් විසඳුමක් තිබේද? Thx
5er

6
Jer 5er ඔබේ ජාවා ActionBarActivity භාවිතා කරන්නේ නම් තේමාව Theme.AppCompat දීර් extend කළ යුතුය. තේමාව විස්තාරණය කරන තේමාවන් අතලොස්සක් ඇත. ඇප්කොම්පට් හෝ ඔබට එය ඔබම දිගු කර වෙනස් කළ හැකිය. ActionBarActivity මාපිය ඉවත් නොකර ඔබට Theme.AppCompat භාවිතා කළ නොහැක.
බොබ්බේක් 4

26
ශෛලියේ <style name = "AppTheme" parent = "Theme.AppCompat.Light.DarkActionBar"> මෙය මගේ ගැටලුව විසඳීය. :)
හර්මීත් සිං

550

ඔබ කළ යුත්තේ ගොනුවේ android:theme="@style/Theme.AppCompat.Light"ඇති ඔබගේ යෙදුම් ටැගයට එක් කිරීම පමණි AndroidManifest.xml.


2
කේතයේ, Ant2009 විසින් AppTheme සකසා ඇති අතර ඒවා Theme.AppCompat වෙතින් පැවත එන අයගෙන් විහිදේ. එය ක්‍රියාත්මක විය යුතුය. මගේ උපාංගයේ 5.0 දක්වා උත්ශ්‍රේණිගත කිරීමෙන් පසුව මට එකම ගැටළුවක් ඇති වූ අතර @ style / Theme.AppCompat.Light මගේ ක්‍රියාකාරකම්වල තේමාව ලෙස සැකසීම අවසන් විය. මෙහි යමක් නිවැරදි නැත ...
speedynomads

36
මෙය ඇන්ඩ්‍රොයිඩ් ස්ටුඩියෝ සඳහා වලංගු පිළිතුරක් නොවේ, නමුත් සමහර අවස්ථාවල එය style.xml ගොනු මඟ හරින විට එය ඉක්මන් විසඳුමක් ලෙස ක්‍රියා කරයි. ඇන්ඩ්‍රොයිඩ් ස්ටුඩියෝ හි, තේමාව නිර්වචනය කිරීම සඳහා නිසි ක්‍රමය වන්නේ ඒවා ස්ටයිල්.එක්එම්එල් ලිපිගොනු වලින් නිර්වචනය කිරීමයි, ඉන්පසු ඇන්ඩ්‍රොයිඩ් මනිෆෙස්ට් ගොනුව හුදෙක් ඒවා වෙත යොමු වන අතර ඔබේ උපාංගයේ ඔබ ධාවනය කරන්නේ කුමන ඇන්ඩ්‍රොයිඩ් අනුවාදය මත පදනම්ව ඒවා තෝරන්න. සාමාන්‍යයෙන් එය android: තේමාව = "@ style / AppTheme" ලෙස සකසා ඇති අතර මෙම AppTheme යන්නෙන් අදහස් වන්නේ <style name = "Theme.AppTheme" parent = "Theme.AppCompat.Light"> style.xml
zeeshan

5
මෙය මට එතරම් සාර්ථක වූයේ නැත, මන්ද මම
හෝලෝ

1
ස්නැක්බාර් භාවිතා කරමින් මෙම ගැටලුව වෙත දිව යන්න. මෙය මගේ ප්‍රශ්නය විසඳීය.
වැඩ කළේ

2
Ar මාටින් ඔබ මා හා සමාන නම්, ඔබ (V21) style.xml ගොනුවට (V21 සඳහා විශේෂිත ගුණාංග නොමැතිව) තැබූවාට වඩා එකම ශෛලියේ නම සාමාන්‍ය ගොනු විලාසිතාවන්හි එක් කිරීමට අමතක කර ඇත. ඔබ V21 ෆෝල්ඩරයේ ශෛලියක් ප්‍රකාශ කරන්නේ නම් සහ ඔබගේ උපාංගයට පහත සංස්කරණයක් තිබේ නම්. එය සොයාගත නොහැකි නිසා ව්‍යතිරේකයක් ඉවත් කරනු ලැබේ.
letroll

282

මට සමාන ගැටලුවක් ඇති බැවින් ඉහත අදහස් දැක්වීමේදී ark මාක්කීන් වෙතින් පිළිතුර පිටපත් කිරීම.

පෝස්ට් එකේ ඉහළින්ම සඳහන් දෝෂය මා සතුව ඇති අතර මම අනතුරු ඇඟවීමේ සංවාදයක් එක් කිරීමෙන් පසුව සිදු විය. මැනිෆෙස්ටයේ අදාළ සියලු ශෛලීය තොරතුරු මා සතුව ඇත. ඇඟවීම් සාදන්නා තුළ සන්දර්භය යොමු කිරීම වෙනස් කිරීමෙන් මගේ ගැටළුව සුව විය - මම වෙනස් කළෙමි:

new android.support.v7.app.AlertDialog.Builder(getApplicationContext())

වෙත:

new android.support.v7.app.AlertDialog.Builder(this)

තවත් ගැටළු නොමැත.


5
එය මා සමඟ ද සිදුවිය. මම උත්සාහ කරමින් සිටියෙමි, ඔබේ පිළිතුර සැබවින්ම ක්‍රියාත්මක විය! එය වැඩ කිරීමට ඇති තර්කනය කුමක්ද? මට ඇත්තටම තේරුණේ නැහැ.
kirtan403

6
නැතහොත්, ඔබ ඔබේ ඇලර්ට් ඩයලොග් කෙලින්ම ක්‍රියාකාරකමකට වඩා කැබැල්ලක ගොඩනඟන්නේ නම්, ඉහත යෝජනා කර ඇති ආකාරයට getActivity()වඩා භාවිතා thisකර ගැටළුව නිරාකරණය වේ. ඇයි, මට පැරණි ඇලර්ට් ඩයලොග් (බිල්ඩර් (xxx) කේතය අනුමාන කළ හැක්කේ එක්කෝ වෙනත් වර්ගයක් සම්මත කර ගැනීමට අවශ්‍ය වූ නිසා හෝ සම්මත වී ඇති දේ ගැන එතරම් උනන්දුවක් නොදක්වන නිසාය. ගූගල් විසින් පැරණි කේතය සඳහා ප්‍රලේඛනය සැඟවීමට (ඉවත් කිරීමට?) තෝරාගෙන ඇති හෙයින්, v7.app අනුවාදය භාවිතය දිරිගැන්වීමේ උත්සාහයක් ලෙස, නිසැකවම පැවසීමට ක්‍රමයක් මා නොදනිමි.
ne න් ගන්

යෝජිත දෙයට ප්‍රතිවිරුද්ධ දේ කළා. එය ක්‍රියාත්මක විය: පී. ස්තූතියි!
හරිස්වාක්

1
මෙය මා සඳහා වන වැඩසටහන විසඳයි, ඔබ අරේ ඇඩැප්ටරයක් ​​හෝ ඒ හා සමාන ඇඩැප්ටර පන්තියක් තුළ සිටිනවා getContext()වෙනුවට ඔබ භාවිතා කරනු ඇත this.
ඉබ්‍රාහිම් එච්

1
මට හමු වූ අව්‍යාජ විසඳුම මෙයයි. ඉඟිය: කරුණාකර getApplicationContext () හි වෙනස සඳහන් කරන්න.
prazeev

109

min sdk 10 ActionBarයනු api මට්ටමේ 11 සිට ලබා ගත හැකිය. එබැවින් 10 සඳහා ඔබ භාවිතා AppCompatකළ යුතු ආධාරක පුස්තකාලයෙන් භාවිතා කළ යුතුය Theme.AppCompat.

භාවිත

android:theme="@style/Theme.AppCompat" >

නැතහොත් ඔබට ඉහළින් ක්‍රියාකාරී තීරුව අවශ්‍ය නොවේ නම්

android:theme="@style/Theme.AppCompat.NoActionBar">

වැඩි විස්තර @

http://developer.android.com/guide/topics/ui/actionbar.html

සංස්කරණය කරන්න:

මම ඔප් පෝස්ට් වැරදියට කියවා ඇති.

ක්‍රියාකාරකම් තේමාවක් සහිත සංවාදයක් අවශ්‍ය බව පෙනේ. බොබ්බේක් 4 විසින් දැනටමත් යෝජනා කර ඇති පරිදි Activityඒ වෙනුවට දිගු කරන්න ActionBarActivity.

පහත සබැඳියේ @ ඩයලොග් ගුණාංග බලන්න

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/values/themes.xml/


යෝජනාවට ස්තූතියි. මම දැනටමත් එය උත්සාහ කර ඇත්තෙමි. මටත් ඒ වගේ ප්‍රශ්නයක් තියෙනවා. මගේ මෝස්තර ගොනුව මේ වගේ ය: <style name = "AppTheme" parent = "Theme.AppCompat">
ant2009

2009 ant2009 ඔබට එසේ නොවේ. ඔබගේ ක්රියාකාරකම් සඳහා සහයෝගය පුස්තකාල AppCompat සිට තේමාව භාවිතා කරන්න
Raghunandan

මම මෙම තේමාව නිවැරදිව එකතු කරන්නේ දැයි මට විශ්වාස නැත. නමුත් ඔබ අදහස් කරන්නේ පහත ආනයන ප්‍රකාශය එක් කිරීමද? android.support.v7.appcompat ආනයනය කරන්න. *; කෙසේ වෙතත්, මම එය උත්සාහ කර ඇති අතර සමහර විට මම වැරදියි, මම තවමත් එකම ව්‍යතිරේකය සමඟ අවසන් වී ඇති නිසා.
ant2009

2009 ant2009 ඔබට අභිරුචි සංවාදයක් තිබිය හැකිය. නමුත් ඔබට සම්පූර්ණ තිර සංවාදයක් අවශ්‍යද?
gh ුනන්දන්

මට එය සම්පූර්ණ තිරය ලබා ගැනීමට අවශ්‍ය නොවීය. සංවාද කොටුවක් පමණි. කෙසේ වෙතත්, ගැටළුව දැන් විසඳා ඇත. බොබ්බේක් 4 එය නිවැරදිව තේරුම් ගත්තා. කෙසේ හෝ ඔබ දැරූ උත්සාහයට ස්තූතියි, ඔබ ප්‍රයෝජනවත් උපදෙස් ලබා දී ඇත. කෙසේ වෙතත්, මම තවමත් මේ සියලු ආධාරක පුස්තකාලය සහ AppCompat සමඟ ව්‍යාකූල වී සිටිමි.
ant2009

107

ඔබ යෙදුම් සන්දර්භය භාවිතා කරන්නේ නම්, මේ ආකාරයට:

final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());

මේ වගේ ක්‍රියාකාරකම් සන්දර්භයකට එය වෙනස් කරන්න:

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

ඔබ LayoutInflater.from (<aplication context>) භාවිතා කරන්නේ නම්, ඔබ ක්‍රියාකාරී සන්දර්භය හෝ සපයා ඇති LayoutInflater භාවිතා කරන බවට වග බලා ගන්න එවිට එමඟින් නිවැරදි තේමාව උරුම වේ.
lbarbosa

1
ඔබේ විසඳුම මගේ නඩුවේදී මට උදව් විය. GetApplicationContext () සහ MainActivity.this අතර ඇති වෙනස කුමක්දැයි ඔබට පැහැදිලි කළ හැකිද?
kostyabakay

මෙම සබැඳිය බලන්න: stackoverflow.com/questions/22966601/…
දරුෂ්

10
ඔබ සංවාද ප්රදර්ශනය කිරීමට නොවන ක්රියාකාරකම්, සන්දර්භය, අවශ්ය
behelit

1
එසේනම් මිහිපිට AlertDialog.Builder()a අවශ්‍ය වන්නේ Contextඇයි?
මිං න gh ්යා

46

මගේ තේමාව තේමාවක් වූවත් මගේ AppCompatක්‍රියාකාරකම AppCompatActivity(හෝ Activity, වෙනත් අයගේ පිළිතුරු මත යෝජනා කළ පරිදි) වුවද මම මෙම ගැටලුව අත්විඳිමින් සිටියෙමි . ඒ නිසා මම ව්‍යාපෘතිය පිරිසිදු කළා, නැවත ගොඩනඟා ගත්තා.

( ගොඩනැගීම -> පිරිසිදු ව්‍යාපෘතිය; ගොඩනැගීම -> නැවත ගොඩනැඟීමේ ව්‍යාපෘතිය; ධාවනය -> ධාවනය )

එය ගොළු බවක් පෙනෙන්නට තිබුණත් දැන් එය විශිෂ්ටයි !

එය උපකාරී වේ යැයි සිතමු!


1
AppCompat ක්‍රියාකාරකමට DialogFragment එකතු කිරීමෙන් පසු හරියටම එකම පණිවිඩයක් තිබුනි. ගොනුව, අවලංගු හැඹිලි / නැවත අරඹන්න.
හැල්ක්සිනේට්

3
මම මේ ත්‍රෙඩ් එකේ සියලුම පිළිතුරු උත්සාහ කළා. නමුත් මෙම “ගොළු” පිළිතුර පමණක් ක්‍රියාත්මක වේ. ඔබට ස්තුතියි!
ඩිකා

27

මෙය මා සඳහා සවි කර ඇත්තේ මෙයයි: තේමාව මැනිෆෙස්ටයේ සඳහන් කරනවා වෙනුවට, onCreateවිස්තාරණය වන සෑම ක්‍රියාකාරකමක් සඳහාම මම එය අර්ථ දැක්වුවෙමි ActionBarActivity:

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.MyAppTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_activity_layout);
...
}

මෙන්න xml වලින් MyAppThemeපැවත එන Theme.AppCompatඅතර එය අර්ථ දක්වා ඇත. තේමාව පෙර super.onCreateසහ සැකසිය යුතු බව සලකන්න setContentView.


1
රොබෝ ඉලෙක්ට්‍රික් යනු සම්පත පූරණය කිරීමට උත්සාහ කරන විට setTheme රේඛාවට NullPointerException එකක් විසි කිරීමයි. කිසියම් අදහසක් ඇයි?
රයිස් ඩේවිස්

H රයිස්ඩේවිස් තොග හෝඩුවාවක් නොමැතිව පැවසීම දුෂ්කර නමුත් සමහර විට එයට පළමුව setContentView අවශ්‍යද? එවැනි අවස්ථාවකදී මෙම විසඳුම ඔබ වෙනුවෙන් ක්‍රියා නොකරනු ඇත.
k29

20

ඔබේ මෝස්තර වෙත ගොස් දෙමව්පියන් තබන්න

parent="Theme.AppCompat"

වෙනුවට

parent="@android:style/Theme.Holo.Light"

සම්මත ක්‍රියාකාරකමකින් අපට මෙය කළ හැක්කේ ඇයි? ඇන්ඩ්‍රොයිඩ් ICS හෝ Honecomb සමඟ සම්මත ක්‍රියාකාරකම් සඳහා ක්‍රියාකාරී තීරු නොතැබුවේද? අපගේ අවම ඉලක්කය SDK ICS වෙත යොමු කරන්නේ නම් අප සැමවිටම ActionBarActivity භාවිතා කළ යුතුද?
එස්

අප භාවිතා කරන වර්ගය හෝ අංගය සමඟ අප භාවිතා කළ යුත්තේ කුමන තේමාවද යන්න අප ආනයනය කරන විට සියලු වර්ගවල තේමාවන් ඇත
blackHawk

ස්තූතියි. මෙම පිළිතුර මට උපකාරවත් විය. :)
එම්ඩී නකිබුල් හසන්

17

අපේක්ෂිත ක්‍රියාකාරකමේ තේමාව වෙනස් කරන්න. මෙය මට වැඩ කරයි:

<activity
            android:name="HomeActivity"
            android:screenOrientation="landscape"
            android:theme="@style/Theme.AppCompat.Light"
            android:windowSoftInputMode="stateHidden" />

16

මගේ නඩුවේ මගේ res ඩිරෙක්ටරියේ අගයන්- v21 ගොනුවක් නොමැත. ඉන්පසු මම එය නිර්මාණය කර පහත කේත එකතු කළෙමි:

  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

මම මගේ ව්‍යාපෘතිය ඔරියෝ + උපාංග මත ධාවනය කරමින් සිටි අතර මෙය මට පමණක් ක්‍රියාත්මක විය.
නිශාන්ත් සෝනි

14

ක්‍රියාකාරකම Theme.AppCompat භාවිතා කළද මට සැම්සුන් උපාංගවල එවැනි බිඳ වැටීමක් සිදුවිය . මූලික හේතුව සැම්සුන් පැත්තේ ඇති අමුතු ප්‍රශස්තිකරණයට සම්බන්ධයි:

- if one activity of your app has theme not inherited from Theme.AppCompat
- and it has also `android:launchMode="singleTask"`
- then all the activities that are launched from it will share the same Theme

මගේ විසඳුම වූයේ ඉවත් කිරීමයි android:launchMode="singleTask"


2
මේ සඳහා ද දිව්වා, මම නිවැරදි කිරීම වලංගු කර නැති අතර දෝෂය ප්‍රතිනිෂ්පාදනය කළ නොහැක .. නමුත් මෙම දෝෂය සැම්සුන් උපාංගවල පමණක් මම දකිමි. බොහෝමයක් මුල් බැස ඇති බව පෙනේ, fwiw
danb

පෝස්ට් එකේ ඉහළින්ම සඳහන් දෝෂය මා සතුව ඇති අතර මම අනතුරු ඇඟවීමේ සංවාදයක් එක් කිරීමෙන් පසුව සිදු විය. මැනිෆෙස්ටයේ අදාළ සියලු ශෛලීය තොරතුරු මා සතුව ඇත. ඇඟවීම් සාදන්නා තුළ සන්දර්භය යොමු කිරීම වෙනස් කිරීමෙන් මගේ ගැටළුව සුව විය - මම වෙනස් කළෙමි: නව android.support.v7.app.AlertDialog.Builder (getApplicationContext ()) සිට: නව android.support.v7.app.AlertDialog.Builder (මෙය ) සහ තවත් ගැටළු නොමැත ...
මාර්ක් කීන්

මෙම ප්‍රශස්තිකරණය පිළිබඳව ඔබට තවත් විස්තර හෝ සැම්සුන් වෙත සබැඳි තිබේද? එවිට සියලු ක්‍රියාකාරකම් සඳහා තේමාව ක්‍රියාත්මක කළ යුතුද? ඇප්කොම්පට් හෝ තේමාවක් නොමැති ක්‍රියාකාරකම් තිබිය හැකිද?
AAverin

14

යන්තම් කරන්න

new AlertDialog.Builder(this)

වෙනුවට

new AlertDialog.Builder(getApplicationContext())

වැඩ කරන විසඳුම! මෙම පිළිතුර සමඟ දැන ගැනීමට විනාඩි 30 ක්. මම නව AlertDialog.Builder (getApplicationContext ()) භාවිතා කරන්නේ ඇයි?
එරික් ගාර්ෂියා

thisඅපේක්ෂා කරන වර්ගය කුමක්ද යන්න පැහැදිලි කිරීමට එය ප්‍රයෝජනවත් වනු ඇත.
බ්ලැගෝ

13

ඔබට ActionBarActivity දිගු කිරීමට අවශ්‍ය නම් ඔබේ style.xml:

<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"/>

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->

ඔබ ඔබේ යෙදුමේ ප්‍රධාන තේමාව ලෙස ඇන්ඩ්‍රොයිඩ්: Theme.Material.Light වෙනුවට AppTheme.Base ලෙස සකසන්නේ නම් ඔබට “නීති විරෝධී ස්ටේට්එක්සෙප්ෂන්: මෙම ක්‍රියාකාරකම සමඟ තේමාවක් භාවිතා කළ යුතුය.


12

මට එකම ගැටලුවක් තිබුනි, නමුත් මම මෙය මැනිෆෙස්ට් මත තැබූ විට එය විසඳා ඇත: android: theme = "@ style / Theme.AppCompat.

    <application
        android:allowBackup="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name_test"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat">

        ...    

    </application>

10

මගේ නඩුවේදී ඩයලොග් පෙන්වීමට උත්සාහ කරන විට එවැනි ගැටලුවක් පෙනෙන්නට තිබුණි. ගැටළුව සන්දර්භය තුළ විය, මම න්‍යායාත්මකව ක්‍රියාකාරී සන්දර්භය ලබා දිය යුතු getBaseContext () භාවිතා කර ඇත , නමුත් එය එසේ නොවේ, නැතහොත් ඕනෑම තේමාවක් යෙදීමට පෙර එය සන්දර්භය නැවත ලබා දෙයි.

ඒ නිසා මම getBaseContexts () වෙනුවට " මෙය " ආදේශ කළෙමි , දැන් එය අපේක්ෂිත පරිදි ක්‍රියාත්මක වේ.

        Dialog.showAlert(this, title, message,....);

මම getApplicaitonContext () ගමන්, නමුත් ඔබේ මේ උපක්රමය කළේ
ජීවා

9

<android:theme="@android:style/Theme.Dialog">මගේ appWidget හි දෙබස් පෙන්වීම සඳහා භාවිතා කරන තේමාව සමඟ ක්‍රියාකාරකමක් මා සතුව තිබූ අතර මටද එම ගැටලුවම තිබුණි

පහත දැක්වෙන ක්‍රියාකාරකම් කේතය වෙනස් කිරීමෙන් මම මෙම දෝෂය විසඳා ගත්තෙමි:

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.Theme_AppCompat_Dialog); //this line i added
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dialog);
}

2
මෙය පිළිගත් පිළිතුරේ සියලු සංකීර්ණතාවයෙන් හා පිළිතුරු නොමැතිව මා වෙනුවෙන් වැඩ කළ සෘජු පිළිතුරකි.
කෝරි ට්‍රේස්


8

නව ඇඟවීම් සංවාදයක් නිර්මාණය කරන අතරතුර ඔබ ක්‍රියාකාරකම් සන්දර්භයක් භාවිතා කරන බවට වග බලා ගන්න, යෙදුමක් හෝ මූලික සන්දර්භයක් නොවේ.


7

මට මෙම ගැටලුව ද ඇති අතර එය නිවැරදි කිරීමට මා කළ දේ සහ තවමත් හොලෝ තේමාව භාවිතා කිරීම මෙම පියවර ගැනීමයි:

පළමුව මම මෙම ආනයනය ප්‍රතිස්ථාපනය කළෙමි:

import android.support.v7.app.AppCompatActivity;

මේ සමඟ:

import android.app.Activity;

ඉන්පසු මගේ දිගුව වෙනස් කළේ:

public class MyClass extends AppCompatActivity {//...

මේ සඳහා:

public class MyClass extends Activity {//...

තවද මෙම ආනයනය වෙනස් කිරීමට සිදු විය:

import android.support.v7.app.AlertDialog;

මෙම ආනයනයට:

import android.app.AlertDialog;

ක්‍රියාකාරකම් මට්ටමින් මැනිෆෙස්ටයේ ඔබේ තේමා ටැගය භාවිතා කළ හැකිය:

android:theme="@android:style/Theme.Holo.Dialog" />

අවසාන වශයෙන්, (ඔබේ ව්‍යාපෘතියේ v7 appCompat භාවිතා කළ යුතු වෙනත් පංති නොමැති නම්) ඔබට ඔබේ ව්‍යාපෘතිය පිරිසිදු කර නැවත ගොඩනඟා ගත හැකිය, නැතහොත් යෙදුම් මට්ටමින් ශ්‍රේණියේ ගොඩනැගීමේ ගොනුවේ මෙම ප්‍රවේශය මකා දැමිය හැකිය:

compile 'com.android.support:appcompat-v7:23.2.1'

ඔබේ ව්‍යාපෘතියේ වෙනත් පන්ති තිබේ නම් v7 appCompat භාවිතා කළ යුතුය. එවිට ව්‍යාපෘතිය පිරිසිදු කර නැවත ගොඩනඟන්න.


6

ඔබ මේ සඳහා පැමිණියේ පෙර sdk අනුවාද වල ඔබේ තේමා ශෛලියට ද්‍රව්‍යමය මෝස්තරය 21 ට යෙදීමට ActionBarActivityඅවශ්‍ය AppThemeනිසාය. එබැවින් ඔබගේ AppTheme පිළිබඳ ඔබේම අභිරුචිකරණය වැළැක්වීමට ඔබට අවශ්‍ය නම්, ඔබගේ විලාසිතාවන්හි වෙනස් විය යුත්තේ xml (පෙර sdk වෙත 21) එබැවින් මේ ආකාරයෙන්, යෙදුම් සංයුක්ත තේමාවක් සඳහා උරුම විය හැකිය.

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">

මේ වෙනුවෙන්:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

6
ඒක කළා. තවමත් ගැටලුව තිබේ. එබැවින් ඊට වැඩි යමක් ඇත.
මාටින්

6

ඔබගේ තේමා විලාසිතාව දෙමාපිය ලෙස වෙනස් කරන්න

 parent="Theme.AppCompat"

මෙය මට වැඩ කළා ...


6

එම දෝෂයට ඔබට බොහෝ විසඳුම් තිබේ.

  1. ActionbarActivity හෝ AppCompatActivity වෙනුවට ඔබ ක්‍රියාකාරකම් හෝ කොටස් කොටස් ක්‍රියාකාරකම් භාවිතා කළ යුතුය

  2. ඔබට අවශ්ය නම් භාවිතා ActionbarActivity හෝ AppCompatActivity , ඔබ වෙනස් විය යුතුයි styles.xml Theme.Holo.xxxx කිරීමට Theme.AppCompat.Light (නම් කිරීමට අවශ්ය එකතු DarkActionbar )

ඔබට ක්‍රියාකාරී තීරුව හෝ AppCompat පිළිබඳ උසස් ගුණාංග අවශ්‍ය නොවේ නම් ඔබට Actionbar හෝ AppCompat භාවිතා කිරීම අවශ්‍ය නොවේ .


6

ඇන්ඩ්‍රොයිඩ් මැනිෆෙස්ට් හි ක්‍රියාකාරකම් තේමාව AppTheme ලෙස පහත දැක්වෙන කේත ස්නිපටය ලෙස වෙනස් කරන්න

<activity
  android:name=".MainActivity"
  android:label="@string/app_name"
  android:theme="@style/AppTheme">
</activity>

<ක්‍රියාකාරකම් android: name = ". ප්‍රධාන ක්‍රියාකාරිත්වය" android: label = "@ string / app_name" android: theme = "@ style / AppTheme"> </activity>
ශිඛා

6

මෙය ඔබට කැබැල්ලක AlertDialog අවශ්‍ය වූ විට ය

            AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
            adb.setTitle("My alert Dialogue \n");
            adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                  //some code

            } });
            adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                 dialog.dismiss();

                } });
            adb.show();

6

මගේ අත්දැකීම් වලදී ගැටලුව වූයේ මගේ දෙබස පෙන්වූ සන්දර්භයයි. බොත්තමක් ඇතුලත මම මේ ආකාරයෙන් ඇලර්ට් ඩයලොග් එකක් ස්ථාපනය කරමි:

builder = new AlertDialog.Builder(getApplicationContext());

නමුත් සන්දර්භය නිවැරදි නොවන අතර දෝෂය ඇති විය. මම මේ ආකාරයෙන් යෙදුම් සන්දර්භය භාවිතා කර එය වෙනස් කර ඇත:

ප්‍රකාශන කොටසේ:

Context mContext;

onCreate ක්‍රමයේදී

mContext = this;

අවසාන වශයෙන් මට ඇලර්ට් ඩයලොග් අවශ්‍ය කේතයේ:

start_stop = (Button) findViewById(R.id.start_stop);
start_stop.setOnClickListener( new View.OnClickListener()
     {
                @Override
                public void onClick(View v)
                {
                    if (!is_running)
                    {
                        builder = new AlertDialog.Builder(mContext);
                        builder.setMessage("MYTEXT")
                                .setCancelable(false)
                                .setPositiveButton("SI", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                    Task_Started = false;
                                    startTask();
                                    }
                                })
                                .setNegativeButton("NO",
                                        new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        dialog.cancel();
                                    }
                                });
                        AlertDialog alert = builder.create();
                        alert.show();
                    }
            }
        }

මෙය මට විසඳුමයි.


ඔබ මුලින් තිබු ආකාරයටම යෙදුම් සන්දර්භයක් භාවිතා නොකළ යුතු බව ඔබ නිවැරදිය. ඔබ කර ඇත්තේ ක්‍රියාකාරකම සන්දර්භය ලෙස භාවිතා කිරීමයි. කෙසේ වෙතත් මෙය යෙදුම් සන්දර්භයක් හෝ එහි උප පංතියක් නොවේ. එබැවින් ඔබ වෙනත් ආකාරයකින් යෙදුම් සන්දර්භයක් භාවිතා කරන බව පැවසීම නිවැරදි නොවේ.
හොඩ්

6

මටත් මේ ප්‍රශ්නයම දැනුණා. මම අභිරුචි සංචාලන ලාච්චුවක් නිර්මාණය කළ නිසා. නමුත් මේ ආකාරයෙන් මගේ මැනිෆෙස්ටයේ තේමාව සඳහන් කිරීමට මට අමතක ය

android:theme="@style/Theme.AppCompat.NoActionBar"

ඉහත තේමාව මගේ මැනිෆෙස්ටයට එක් කළ විගසම එය ගැටළුව විසඳීය.


5

මෙය මා වෙනුවෙන් වැඩ කළා:

<application
           android:allowBackup="true"
           android:icon="@mipmap/ic_launcher"
           android:label="@string/app_name"
           android:theme="@style/AppTheme" >
           <activity
               android:name=".MainActivity"
               android:label="@string/app_name"
               android:theme="@style/Theme.AppCompat.NoActionBar">

               <intent-filter>
                   <action android:name="android.intent.action.MAIN" />

                   <category android:name="android.intent.category.LAUNCHER" />
               </intent-filter>
           </activity>
</application>

5

ඔබේ ක්‍රියාකාරකම ActionBarActivity දිගු කරන අතර එමඟින් AppCompat.theme යෙදිය යුතුය. ActionBarActivity සිට Activity හෝ FragmentActivity දක්වා වෙනස් කිරීමෙන් එය ගැටළුව විසඳනු ඇත.

ඔබ ක්‍රියාකාරී තීරුවක් භාවිතා නොකරන්නේ නම්:

android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" 

4

ඉක්මන් විසඳුමක්.

ඔබේ මූලික තේමා මාපිය ශෛලියෙන් වෙනස් කරන්න

සිට ප්රතිස්ථාපනය කරන්න

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

වෙත

<style name="AppTheme" parent="Theme.AppCompat">

මට උදව් නොකරයි, ව්‍යතිරේකය තවමත් අවුලුවයි
ඉයුජින් ජී. පිලිපෝව්

3

මෙම විසඳුම මා වෙනුවෙන් වැඩ කළේය.

සැලසුම් පුස්තකාලය ආධාරක v4 සහ ඇප්කොම්පට් ආධාරක පුස්තකාල මත රඳා පවතී, එබැවින් ඇප්කොම්පැට් සහ සැලසුම් පුස්තකාලය සඳහා විවිධ අනුවාදයන් භාවිතා නොකරන්න.

භාවිත

 compile 'com.android.support:appcompat-v7:23.0.0'
 compile 'com.android.support:design:23.0.0'

වෙනුවට

 compile 'com.android.support:appcompat-v7:23.0.0'
 compile 'com.android.support:design:23.1.0'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.