क्या वरीयता स्क्रीन के नीचे एक बटन जोड़ने और स्क्रॉल करते समय उन्हें सही करने का कोई तरीका है?
क्या वरीयता स्क्रीन के नीचे एक बटन जोड़ने और स्क्रॉल करते समय उन्हें सही करने का कोई तरीका है?
जवाबों:
वरीयताओं की उपस्थिति को अनुकूलित करने के लिए एक और समाधान है।
बटन या जो भी आप मानक वरीयताओं में जोड़ना चाहते हैं, उसके साथ एक सामान्य XML लेआउट डिज़ाइन करें। ListView
अपने लेआउट में शामिल करें और इसे आईडी दें @android:id/list
।
मान लें कि हम लेआउट फ़ाइल कहते हैं res/layout/main.xml
। यह कुछ इस तरह दिख सकता है:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button android:text="This is a button on top of all preferences."
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ListView android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
अपने में PreferenceActivity
, इन दो पंक्तियों को अपने में जोड़ें onCreate
:
addPreferencesFromResource(R.xml.preferences);
setContentView(R.layout.main);
ListView
अपने लेआउट में तो प्राथमिकताओं में हमेशा की तरह परिभाषित द्वारा प्रतिस्थापित किया जाएगा res/xml/preferences.xml
।
मुझे पता है कि यह थोड़ा देर हो चुका है, लेकिन मुझे सिर्फ एक समाधान मिला जो मुझे मैक्स के प्रशंसित समाधान से बेहतर लगता है।
आप पसंद करने के लिए बस एक पाद लेख जोड़ सकते हैं (या यदि आप बटन को शीर्ष पर होना चाहते हैं, तो पसंद करें)
public class MyActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
ListView v = getListView();
v.addFooterView(new Button(this));
}
}
मुझे उम्मीद है इससे किसी को सहायता मिलेगी।
ListView
पसंद के साथ प्राप्त नहीं कर सकता हूं
PreferenceFragment
इसकी अपनी सूची है), लेकिन मैंने इसे सिर्फ एक बनाने Preference
और उस Intent
पर सेटिंग करके हल किया। एक बटन बनाने की कोई आवश्यकता नहीं थी (कम से कम मेरे मामले में)
नीचे दिया गया यह उदाहरण पृष्ठ के निचले भाग में एक बटन प्रस्तुत करेगा (यदि कोई व्यक्ति अभी भी रुचि रखता है)।
एक LinearLayout के मामले में आप वजन भी लागू कर सकते हैं; यह आवश्यक है क्योंकि Listview को * fill_parent * पर सेट किया गया है। मैं आमतौर पर इसे * एंड्रॉइड: लेआउट_वेट * के जोड़कर करता हूं:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<ListView android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_weight="10"/>
<Button android:text="This is a button on top of all preferences."
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_weight="1"/>
</LinearLayout>
नीचे दिए गए स्पष्टीकरण में 100% का अनुमान नहीं है लेकिन यह आपको समझने में मदद करेगा ...
+-- View Port (linear layout)
| +-- List View (this is where the preferences will go)
| |
| |
| +--
+--
+--
| Button (which was pushed out of view by the fillparent of ListView
+--
आप यह भी कह सकते हैं, क्योंकि बटन का कोई वजन नहीं है; बटन 0dp ऊंचाई पर प्रदान किया गया है।
अब इस लेआउट_ के साथ जोड़ा गया कि यह बटन को इनवॉइस रेंडर करेगा
+-- View Port (linear layout)
| +-- List View (this is where the preferences will go)
| |
| |
| +--
| +--
| | Button (which was pushed out of view by the fillparent of ListView
| +--
+--
असल में, एक उपाय है। यहाँ एक कोड है, मुझे आशा है, यह किसी के लिए भी उपयोगी होगा। यह स्क्रीन के तल में 3 विकल्प और 2 बटन जैसा दिखता है, स्क्रीन रिज़ॉल्यूशन से स्वतंत्र (इसे 240 के रूप में सबसे कम लक्षित किया गया था)
package com.myapplication.gui;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.view.Display;
import android.view.Gravity;
import android.view.WindowManager;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ScrollView;
import com.myproject.general.HeightListView;
import com.myapplication.R;
public class FilterActivity extends PreferenceActivity {
private LinearLayout rootView;
private LinearLayout buttonView;
private Button buttonDone;
private Button buttonRevert;
private ListView preferenceView;
private LinearLayout gradientView;
private ScrollView scrollRoot;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int height = display.getHeight();
int width = height > 240 ? display.getWidth() : display.getWidth() - 4;
scrollRoot = new ScrollView(this);
scrollRoot.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
rootView = new LinearLayout(this);
rootView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
rootView.setOrientation(LinearLayout.VERTICAL);
buttonView = new LinearLayout(this);
buttonView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
buttonView.setOrientation(LinearLayout.HORIZONTAL);
buttonView.setGravity(Gravity.BOTTOM);
gradientView = new LinearLayout(this);
gradientView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
gradientView.setOrientation(LinearLayout.HORIZONTAL);
gradientView.setBackgroundResource(R.drawable.gradient);
gradientView.setPadding(0, 5, 0, 0);
gradientView.setBackgroundResource(R.drawable.gradient);
buttonDone = new Button(this);
buttonDone.setText(R.string.filterButton_Done);
buttonDone.setLayoutParams(new LayoutParams(width/2, LayoutParams.WRAP_CONTENT));
gradientView.addView(buttonDone);
buttonRevert = new Button(this);
buttonRevert.setText(R.string.filterButton_Revert);
buttonRevert.setLayoutParams(new LayoutParams(width/2, LayoutParams.WRAP_CONTENT));
gradientView.addView(buttonRevert);
buttonView.addView(gradientView);
preferenceView = new HeightListView(this);
preferenceView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
preferenceView.setId(android.R.id.list);
PreferenceScreen screen = createPreferenceHierarchy();
screen.bind(preferenceView);
preferenceView.setAdapter(screen.getRootAdapter());
rootView.addView(preferenceView);
rootView.addView(buttonView);
if (height > 240) {
this.setContentView(rootView);
}
else {
scrollRoot.addView(rootView);
this.setContentView(scrollRoot);
}
setPreferenceScreen(screen);
}
private PreferenceScreen createPreferenceHierarchy() {
PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this);
PreferenceScreen pref1 = getPreferenceManager().createPreferenceScreen(this);
pref1.setKey("pref1");
pref1.setTitle("Title");
pref1.setSummary("Summary");
root.addPreference(pref1);
PreferenceScreen pref2 = getPreferenceManager().createPreferenceScreen(this);
pref2.setKey("pref2");
pref2.setTitle("Title");
pref2.setSummary("Summary");
root.addPreference(pref2);
PreferenceScreen pref3 = getPreferenceManager().createPreferenceScreen(this);
pref3.setKey("pref3");
pref3.setTitle("Title");
pref3.setSummary("Summary");
root.addPreference(pref3);
return root;
}
}
आपको बस सामान्य गतिविधि के अंदर वरीयता का उपयोग करने और गतिविधि लेआउट में बटन जोड़ने की आवश्यकता है।
public class SettingActivity extends Activity {
UserProfileViewModel userProfileViewModel = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setting);
getFragmentManager().beginTransaction()
.replace(R.id.content, new SettingsFragment())
.commit();
}
private class SettingsFragment extends PreferenceFragment {
public SettingsFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.pref_main);
}
}
}
SettingActivity.java
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/buttonSave"/>
<Button
android:id="@+id/buttonSave"
android:text="Save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
activity_setting
buttonSave
:)
यह वही होगा जो कोड को रौनी के उदाहरण में गतिविधि में दिखता है। मेरा इरादा स्क्रीन के निचले भाग में एक मेनू रखना था।
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.prefs);
addPreferencesFromResource(R.xml.prefs);
/* LayoutInflater CX = getLayoutInflater();
CX.inflate(R.layout.main,null);*/
// TODO Auto-generated method stub
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="@dimens/listview_height" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="This is a button on top of all preferences." />
</RelativeLayout>
मैं @Ronnie का संदर्भ लेता हूं, RelativeLayout का उपयोग करता हूं और सूची के लेआउट_ ऊंचाई के लिए एक ऊंचाई सेट करता हूं, और फिर बटन के लेआउट_alignParentBottom = "true" को सेट करता हूं, यह वरीयतास्क्रीन के नीचे एक बटन को प्रस्तुत कर सकता है; तो @Max के तरीके का उपयोग करें। यह मेरी जरूरतों के लिए काम करता है।
Android मानक दृष्टिकोण के लिए एक्शन बार में एक्शन बटन जोड़ना भी संभव है।
public class PrefActivity extends PreferenceActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.preference_header_menu, menu);
return super.onCreateOptionsMenu(menu);
}
}
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/action_add"
android:icon="@drawable/ic_menu_add_dark"
android:title="@string/menu_action_add_title"
android:showAsAction="always" />
</menu>
वरीयता गतिविधि में कस्टम दृश्य यह Android में वरीयताएँ में कस्टम दृश्य जोड़ने में मदद करेगा।
Main.xml बनाएं, एकमात्र आवश्यक दृश्य एक सूची दृश्य है, जिसमें आईडी है android:id="@android:id/list"
:।
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:weightSum="1">
<ListView
android:id="@android:id/list"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="0dp">
</ListView>
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
CustomPreferenceActivity.java बनाएँ
public class CustomPreferenceActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
addPreferencesFromResource(R.xml.settings);
//setup any other views that you have
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText("View Added");
}
}
निम्नलिखित आपकी पसंद स्क्रीन पर क्लिक करने योग्य बटन जोड़ने के लिए एक सरल उपाय है। यह आसान बना दिया गया है क्योंकि प्राथमिकताएं पहले से ही Android में स्थान आरक्षित करती हैं: widgetLayout और बटन Android के साथ क्लिक पर पास कर सकते हैं: onClick।
पहले सामग्री के साथ एक बटन। Xml बनाएं
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:text="BUTTON"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button"
android:onClick="onButtonClick"/>
</LinearLayout>
अब अपनी वरीयताओं में। xml, वरीयता जोड़ें
<Preference
android:key="button"
android:title="Title"
android:summary="Summary"
android:widgetLayout="@layout/button" />
आपकी पसंद को अब केवल ऑनबूटनक्लिक सदस्य रखना है
public class MainActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.main_preferences);
}
public void onButtonClick(View v) {
Log.d("Button", "Yeah, button was clicked");
}
}
preferences.xml:
<Preference
android:key="clearAllData"
android:title="@string/settings_clear_all_data">
</Preference>
SettingsFragment.java:
public class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
Preference clearAllData = (Preference) findPreference("clearAllData");
// setup buttons
final Context context = getActivity();
clearAllData.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
...
}
}
}
मुझे उपरोक्त सभी उत्तर संयुक्त राष्ट्र के अनुपयोगी लगे, क्योंकि मैंने PreferenceScreen
कस्टम लेआउट के अंदर कंटेनर को 'रैप' करने के लिए बनाया था (तब नीचे एक बटन जोड़ना ListView
) वास्तव में काम नहीं करता था।
वे केवल वरीयताओं की सूची (फ्लोटिंग) के शीर्ष पर कस्टम लेआउट को हटाते हैं, और एक नया कस्टम बटन क्लिक करने पर (केवल) बटन के नीचे वरीयता को लागू करेगा।
हालांकि, मुझे यह समाधान मिला जो उपयोग करते समय वरीयता सूची कंटेनर के नीचे एक बटन जोड़ने के लिए एक उपचार का काम करता है PreferenceFragment
।