آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

روش ساخت ویکی Wiki ( چطور میشه  یک یا چند کلمه در متن رو به شکل لینک در آورد مثل ویکی ها&n ...

نورحسینی  12 سال پیش  11 سال پیش
+5 0

سلام دوستان یک برنامه دارم که میخام بعضی کلمات رو لینک کنم و وقتی روی اونها کلیک میشه بره تو صفحه مربوطه راهش چیه ممنون .

0 0
عنوان رو تغییر دادم . (12 سال پیش)
0 0
مطمئنا یکی از راهها استفاده از html ه ولی خب منتظر راههای بهتر میمونیم :) (12 سال پیش)
0 0
ممنون آقا منظورت webview است ؟ مشکل عدم امکان تعویض فونتها در webview برطرف شد صادق جان ودر کل چه ایرادی ازش باقی مونده حل نشده ؟ (12 سال پیش)
0 0
اگه شما میتونی باهاش کنار بیای که مشکلی نداره خیلی هم خوبه. من به شخصه باهاش راحت نیستم . آخه یه جورایی کد تو کد میشه قاطی پاتی میشه! (12 سال پیش)
0 0
آقا این سوال بود علامت سوالش رو یادم رفت : مشکل عدم امکان تعویض فونتها در webview برطرف شد؟ ضمنا اصلا منظور شما از html همون webview ه یا چیز دیگه ؟ کس دیگه ای هم میدونه بگه ممنون . (12 سال پیش)
0 0
آقا اگر کسی میدونه لطفا جواب بده! (12 سال پیش)
0 0
نه حتما webview نیست. میتونی html رو توی textview هم بذاری. بله مشکل فونت که حله. تو همون آموزش استاد هم فونت گفته شد به گمونم (12 سال پیش)
0 0
من استفاده از a href و لینک دادن در webView را ترجیح میدهم (11 سال پیش)
 برای این سوال 12 پاسخ وجود دارد.
پاسخ به سوال 
Spirit  12 سال پیش
+6 0

این روش هم هست :

TextView tv = (TextView) findViewById(R.id.textView);
SpannableString text = new SpannableString(
"این سرویس صرفاً برای این سایت و توسط مدیریت سایت - بهنام آقاجانی ، برنامه نویسی شده است");
ClickableSpan clickfor = new ClickableSpan() {

@Override
public void onClick(View widget) {
Toast.makeText(widget.getContext(), "دانش آموخته از : دانشگاه آزاد اسلامي – واحد تهران مركز",
Toast.LENGTH_LONG).show();
}
};
text.setSpan(new URLSpan("http://uncocoder.com/"), 25,
29, 0);
text.setSpan(clickfor, 51, 64, 0);
tv.setMovementMethod(LinkMovementMethod.getInstance());
tv.setText(text, BufferType.SPANNABLE);
0 0
ممنون امتحان می کنم . (12 سال پیش)
پاسخ به سوال 
Criss  12 سال پیش
+4 0

متنی رو که میخای رو توی یک TextView بزار و برای اون تکست ویو SetOnClickListener تعریف کن بصورت زیر

من از این روش استفاده کردم

 

 txturl.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {

Intent myWebLink = new Intent(android.content.Intent.ACTION_VIEW);
myWebLink.setData(Uri.parse("http://answers.uncocoder.com/user/profile/2385"));
startActivity(myWebLink);

}
});
0 0
این خیلی جالب بود ولی وسط یک خط چطوری میشه یک textview رو بین دو کلمه قرار داد ؟ ممنون میشم راهش رو بگی ؟ (12 سال پیش)
0 0
آقا کسی جوابی برای سوال بالا نداره ؟ ممنون (12 سال پیش)
0 0
پروژه رو با وب ویو نوشتی یا دیتابیس؟ (12 سال پیش)
0 0
من هنوز ننوشتم قربونت برم دارم بهترین راه رو پیدا می کنم . کل پروژه اینه که یک سری مطالب داریم که بعضی کلماتش مثل ویکی لینکه به صفحه همون مطلب که در عین حال اون صفحات پولی هم هست . حالا کلا برای اجرا نظر دوستان چیه ؟ ممنون میشم یک کم سریع تر بگید . (12 سال پیش)
پاسخ به سوال 
محمد حسین زاده  11 سال پیش
+10 0

جواب S P ! R ! T عزیز مناسب و کامله - بهر حال یه سمپل هم میزارم

 public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.main);

TextView textView=(TextView) findViewById(R.id.textView);

String term = "لینک";
String content = "سلام این یه لینکه که وسط متن ما اومده ! به افتخار این لینک وسط متن ما";

final Pattern p = Pattern.compile(term);
final Matcher matcher = p.matcher(content);
final SpannableStringBuilder spannable = new SpannableStringBuilder(content);

while (matcher.find()) {
spannable.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(MainActivity.this, "لینکه کلیک شد!", Toast.LENGTH_LONG).show();
Log.i("PG","لینکه کلیک شد!");
}
},
matcher.start(), matcher.end(),
0);
}

textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setText(spannable,TextView.BufferType.SPANNABLE);
}
}

پاسخ به سوال 
نورحسینی  11 سال پیش
0 0

محمد جان خیلی ممنون از جواب خوبت . ولی سوال اینجاست که من چطور یک کلمه داخل یک فایل وردی رو  لینک کنم ؟

ببین در کد من nokat استرینگی هست که فایل وردی درش کپی شده.و این متن میخاد در txtmatn نمایش داده بشه . حالا در متن اون استرینگ بعضی از کلمات لینک باید بشن . حالا چه کار باید بکنم ؟

سوال دوم هم اینه که اون override سومی و inflate و ...که با ایجاد فایل جدید ایجاد میشه به چه درد میخوره ؟ ما اصلا تا آخر پروژه باهاش کار داریم یا نه ؟

ممنون از وتی که میزاری !

 
public class ActivityNokat extends Activity {



@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();

Intent intent = new Intent(ActivityNokat.this, ActivityIndex.class);
ActivityNokat.this.startActivity(intent);
ActivityNokat.this.finish();


}

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










TextView txtmatn = (TextView) findViewById(R.id.txtmatn);

txtmatn.setText(getString(R.string.nokat));




}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}

0 0
البته اگر دوستان دیگه هم میدونن دریغ نکنن . ممنون از همه . (11 سال پیش)
پاسخ به سوال 
نورحسینی  11 سال پیش
+1 0

آقا یافتم من به این صورت حلش کردم الحمدلله. میزارم تا آیندگان استفاده کنند ساخت ویکی مدتها فکرم رو مشغول کرده بود اصلا فکرش رو نمیکردم توی ۱۰ دقیقه حل بشه . بازم ممنون از دوستان و spirit و بخصوص محمد عزیز .اما یک سوال دیگه هم پیش میاد که اگر ما چند عبارت رو بخایم لینک کنیم و مثلا term2 ,term3 ... چطور باید بنویسیم چون قبول نمیکنه که با هم در یک پرانتز باشند در 

      final Pattern p = Pattern.compile(term,term2,term3);

و اما جواب سوال دوم هنوز مجهوله .



@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();

Intent intent = new Intent(ActivityNokat.this, ActivityIndex.class);
ActivityNokat.this.startActivity(intent);
ActivityNokat.this.finish();



}

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










TextView txtmatn = (TextView) findViewById(R.id.txtmatn);


//txtmatn.setText(getString(R.string.nokat));


//TextView textView=(TextView) findViewById(R.id.textView);

String term = "مهم";
String content = getString(R.string.nokat);

final Pattern p = Pattern.compile(term);
final Matcher matcher = p.matcher(content);
final SpannableStringBuilder spannable = new SpannableStringBuilder(content);

while (matcher.find()) {
spannable.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(ActivityNokat.this, "لینکه کلیک شد!", Toast.LENGTH_LONG).show();
Log.i("PG","لینکه کلیک شد!");
}
},
matcher.start(), matcher.end(),
0);
}

txtmatn.setMovementMethod(LinkMovementMethod.getInstance());
txtmatn.setText(spannable,TextView.BufferType.SPANNABLE);
}





@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}


0 0
دو سوال مونده دوستان! (11 سال پیش)
0 0
سوال دوم : مربوط بهoptionMenu هستش اگه استفاده نمیکنی پاکش کن - سوال آخر : بستگی به ما هوش ما داره - ساده ترین حالت اینه که برای هر کلمه اون فرآیند تکرار بشه ( که البته به احتمال 99.9 درصد راه های بهتری هم هست که باید روش فکر کرد ( باید باهاش درگیر بشین ) ) (11 سال پیش)
0 0
شما همه کلمات "مهم" را لینک داده اید ولی ویکی اینجوری نیست و خودتون مشخص میکنید که چه کلمه ای لینک بخوره یا نخوره. (11 سال پیش)
0 0
سید جان راهش چیه خوب ؟ یک جایی انگار صحبت از webview کرده بودی نه ؟ کدش رو میزاری ؟ ممنون . (11 سال پیش)
پاسخ به سوال 
محمد حسین زاده  11 سال پیش
+6 0

مهدی جان در مورد چند واژه پرسیده بودی - راهکار باز هم همینه

پیاده سازی دیگه به خودت بر میگرده - میخوای همه کلمات توی متنت لینک بشن - آیتم خاصی لینک بشه و ...

کد زیر رو تست کنی و با قبلی قیاس کنی تقریبا دستت میاد باید چه کنی

 
public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.main);

TextView textView = (TextView) findViewById(R.id.textView);

Map<String, String> wikiItems = new HashMap<String, String>();

wikiItems.put("لینک", "لینک--");
wikiItems.put("متن", "متن--");
wikiItems.put("وسط", "وسط--");

String content = "سلام این یه لینکه که وسط متن ما اومده ! به افتخار این لینک وسط متن ما";

final SpannableStringBuilder spannable = new SpannableStringBuilder(content);

Iterator<Map.Entry<String, String>> it = wikiItems.entrySet().iterator();

while (it.hasNext()) {

final Map.Entry<String, String> entry = it.next();

int startIndex = content.indexOf(entry.getKey());

if (startIndex == -1) continue;

spannable.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {

Toast.makeText(MainActivity.this, entry.getValue(), Toast.LENGTH_LONG).show();
}
},
startIndex, startIndex + entry.getKey().length(),
0);
}

textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setText(spannable, TextView.BufferType.SPANNABLE);
}
}

0 0
آقا دستت درد نکنه . (11 سال پیش)
پاسخ به سوال 
نورحسینی  11 سال پیش
0 0

ضمن تشکر از همه دوستان بحث ساخت ویکی داره کامل میشه .

من  کد رو وارد کردم و درست هم کار میکنه ولی مشکل اینجاست که اگر بخاهیم به جای toast در آن کلیک بنویسیم که با تاچ هر عبارت صفحه مربوط به همون عبارت باز بشه و مقدار معادلش که قبلا تعریف کردیم به نمایش در بیاد چجور باید بنویسیم ؟ من سعی کردم تا جا های خوبی هم رسیدم ولی کامل نشد کد رو میزارم براتون :

 
public class ActivityRizesh extends Activity {






@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();

Intent intent = new Intent(ActivityRizesh.this, ActivityIndex.class);
ActivityRizesh.this.startActivity(intent);
ActivityRizesh.this.finish();



}

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


final TextView txtmatn = (TextView) findViewById(R.id.txtmatn);

Map<String, String> wikiItems = new HashMap<String, String>();

wikiItems.put("لینک", "متن معادل لینک");
wikiItems.put("متن", "متن معادل متن");
wikiItems.put("وسط", "متن معادل وسط");

String content = "سلام این یه لینکه که وسط متن ما اومده ! به افتخار این لینک وسط متن ما";

final SpannableStringBuilder spannable = new SpannableStringBuilder(content);

Iterator<Map.Entry<String, String>> it = wikiItems.entrySet().iterator();

while (it.hasNext()) {

final Map.Entry<String, String> entry = it.next();

int startIndex = content.indexOf(entry.getKey());

if (startIndex == -1) continue;

spannable.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {

//Toast.makeText(ActivityRizesh.this, entry.getValue(), Toast.LENGTH_LONG).show();


Intent intent = new Intent(ActivityRizesh.this, ActivityMatn.class);
ActivityRizesh.this.startActivity(intent);
ActivityRizesh.this.finish();


}
},
startIndex, startIndex + entry.getKey().length(),
0);
}

txtmatn.setMovementMethod(LinkMovementMethod.getInstance());
txtmatn.setText(spannable, TextView.BufferType.SPANNABLE);
}








@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}

حالا در ActivityMatn با کد زیر نمیدونم چطور اون متن های معادل رو که در پرانتز ها آوردم باید صدا بزنم ولی این به ذهنم رسی که اگر متد entry.getValue() به صورت استاتیک نوشته بشه میشه اینجا صداش کرد و حل میشه :


public class ActivityMatn extends Activity {






@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();

Intent intent = new Intent(ActivityMatn.this, ActivityIndex.class);
ActivityMatn.this.startActivity(intent);
ActivityMatn.this.finish();



}


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


TextView txtmatn = (TextView) findViewById(R.id.txtmatn);
txtmatn.settext(entry.getValue());

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}

اما در مورد راه حل پست قبلی که خیلی ساده تر بود من با تکرار همون پروسه لینک کردن فقط یک کلمه  خواستم که برای هر کلمه ای کد مجزا بنویسم اما نتیجه این شد که فقط یکی از کد ها رو ترتیب اثر داد ولینک کرد اینم کد مشکل چیه حالا؟


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


final TextView txtmatn = (TextView) findViewById(R.id.txtmatn);

//txtmatn.setText(getString(R.string.khoshki));

//TextView textView=(TextView) findViewById(R.id.textView);

String term = "قرص ویتامین";

String content = getString(R.string.rizesh);

final Pattern p = Pattern.compile(term);
final Matcher matcher = p.matcher(content);
final SpannableStringBuilder spannable = new SpannableStringBuilder(content);

while (matcher.find()) {
spannable.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(ActivityRizesh.this, "لینکه کلیک شد!", Toast.LENGTH_LONG).show();
Log.i("PG","لینکه کلیک شد!");
}
},
matcher.start(), matcher.end(),
0);
}

txtmatn.setMovementMethod(LinkMovementMethod.getInstance());
txtmatn.setText(spannable,TextView.BufferType.SPANNABLE);






String term2 = "عصاره ";

String content2 = getString(R.string.rizesh);

final Pattern p2 = Pattern.compile(term2);
final Matcher matcher2 = p2.matcher(content2);
final SpannableStringBuilder spannable2 = new SpannableStringBuilder(content2);

while (matcher2.find()) {
spannable2.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(ActivityRizesh.this, "لینکه کلیک شد!", Toast.LENGTH_LONG).show();
Log.i("PG","لینکه کلیک شد!");
}
},
matcher2.start(), matcher2.end(),
0);
}

 

 
0 0
دوستان و اساتید در مورد هر کدوم از راه حل های بالا نظری داشتند ممنون میشیم . کار گیره ! (11 سال پیش)
0 0
در مورد مورد آخر > شما یکبار اون فرآیند رو انجام دادی و خروجیش رو دادی به TextView ، و بعد اون ، دوباره از اول همون کار رو کردی و همون طور رو هوا مونده ; شما باید خروجی فرآیند اول رو بدی به فرآیند دوم و در آخر بدی به TextView - به عنوان یک دوست کوچیک : جا داره مفاهیم جاوا رو بیشتر تمرین کنید :) (11 سال پیش)
پاسخ به سوال 
نورحسینی  11 سال پیش
0 0

ضمن تشکر از Sp!R!T عزیز که وقت میزاره من کد  رو اصلاح کردم یعنی settext رو اضافه کردم ولی نمیدونم چطوری باید خروجی فرآیند اول رو  به فرآیند دوم بدم  و در آخر بدم به TextView البته سعی کردم این کار رو بکنم و همه رو جمع کنم در Allspannables ولی ارور میده حالا راهش چیه ؟ ممنون

     
final TextView txtmatn = (TextView) findViewById(R.id.txtmatn);

//txtmatn.setText(getString(R.string.khoshki));

//TextView textView=(TextView) findViewById(R.id.textView);

String term = "قرص ویتامین";

String content = getString(R.string.rizesh);

final Pattern p = Pattern.compile(term);
final Matcher matcher = p.matcher(content);
final SpannableStringBuilder spannable = new SpannableStringBuilder(content);

while (matcher.find()) {
spannable.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(ActivityRizesh.this, "لینکه کلیک شد!", Toast.LENGTH_LONG).show();
Log.i("PG","لینکه کلیک شد!");
}
},
matcher.start(), matcher.end(),
0);
}

txtmatn.setMovementMethod(LinkMovementMethod.getInstance());
// txtmatn.setText(spannable,TextView.BufferType.SPANNABLE);






String term2 = "عصاره ";

String content2 = getString(R.string.rizesh);

final Pattern p2 = Pattern.compile(term2);
final Matcher matcher2 = p2.matcher(content2);
final SpannableStringBuilder spannable2 = new SpannableStringBuilder(content2);

while (matcher2.find()) {
spannable2.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(ActivityRizesh.this, "لینکه کلیک شد!", Toast.LENGTH_LONG).show();
Log.i("PG","لینکه کلیک شد!");
}
},
matcher2.start(), matcher2.end(),
0);
}
txtmatn.setMovementMethod(LinkMovementMethod.getInstance());
//txtmatn.setText(spannable2,TextView.BufferType.SPANNABLE);

/////////////
String term3 = "معجون";

String content3 = getString(R.string.rizesh);

final Pattern p3 = Pattern.compile(term3);
final Matcher matcher3 = p3.matcher(content3);
final SpannableStringBuilder spannable3 = new SpannableStringBuilder(content3);

while (matcher3.find()) {
spannable3.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(ActivityRizesh.this, "لینکه کلیک شد!", Toast.LENGTH_LONG).show();
Log.i("PG","لینکه کلیک شد!");
}
},
matcher3.start(), matcher3.end(),
0);
}
txtmatn.setMovementMethod(LinkMovementMethod.getInstance());
////////////////////

AllSpannables = spannable + spannable2 + spannable3;
txtmatn.setText(AllSpannables,TextView.BufferType.SPANNABLE);

0 0
لطفا اساتید تصحیح شده بخشی از کد رو زحمت بکشن و بزارن چون ممکنه با راهنمایی مطلب درست منتقل نشه . ممنون از لطف شما . (11 سال پیش)
0 0
آقا من حتی ۳ تا رو این طور هم جمع کردم و دیگه ارور نمیده ولی دیگه هیچ کدوم رو لینک نمیکنه . txtmatn.setText(spannable +""+ spannable2 +""+ spannable3 + "" ,TextView.BufferType.SPANNABLE); (11 سال پیش)
پاسخ به سوال 
نورحسینی  11 سال پیش
0 0

چون کدهای بالا درست نشون داده نشد یک بار دیگه ۲ تا راه دیگه رو هم که برای جمع کردن ۳ تاشون در یک تکست ویو  رفتم مینویسم که البته ناموفق بود بازم .

  
String AllSpannables = spannable +""+ spannable2 + spannable3;
txtmatn.setText(AllSpannables,TextView.BufferType.SPANNABLE);



و یا



//String AllSpannables = spannable +""+ spannable2 + spannable3;
txtmatn.setText(spannable +""+ spannable2 + spannable3,TextView.BufferType.SPANNABLE);







+1 0
مفهوم اسپن با چیزی که تو ذهنته متفاوته - اسپنی قابل کلیک روی یه رشته ایجاد میشه از اندیس a تا اندیس b (11 سال پیش)
0 0
ممنون محمد جان .کوتاه بود ولی نسبتا راهگشا . (11 سال پیش)
پاسخ به سوال 
نورحسینی  11 سال پیش
0 0

خوب با تشکر از دوستان .  بعد از کلی  انتظار کشیدن نه چندان مفید  و بعدش کلنجار رفتن با کد  از طریق شیوه آزمون و خطا و کمک های قبلی دوستان تونستم حلش کنم الحمدلله و الان دیگه خیلی نزدیک شده به شکل نهایی خودش فقط یک مشکلی هست و اون اینکه چون هر کاری کردم نتونستم با کلیک بر روی یک کلمه یک اکتیویتی جدا باز کنم ( یعنی کاری نداره ولی مشکل اینه که در اکتیویتی جدید همونطور که قبلا هم بالاتر نوشتم نمیدونم چطور میشه متن متناظر لینک رو در داخل تکست ویو انداخت) در نتیجه اومدم تکست ویوی همون صفحه ای که داخلش هستیم رو بدون اینکه یک صفحه جدید باز بشه دوباره ست تکست کردم . اینجا مشکل حل میشه ولی در برگشت با دکمه بک مکانیکی به مشکل بر میخوریم یعنی به دو مرحله قبل بر میگرده . اگر کسی بتونه راهنمایی کنه که چطوری من این دستور txtmatn.setText(entry.getValue()); رو در اکتیویتیه جدیدی که برای اون لینک باز میشه ست تکست کنم (چون در حالت معمول قبول نمیکنه ولی به نظرم اگر استاتیک نوشته بشه قابل صدا زدنه ولی من بلد نیستم چطوری! ) کلا مشکل من و هر کس دیگه ای که بعدا میاد حل میشه فقط اینکه بشه اون رو از اکتیویتی لینکها صدا زد  . ممنون .

 
public class ActivityRizesh extends Activity {











@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();

Intent intent = new Intent(ActivityRizesh.this, ActivityRizesh.class);
ActivityRizesh.this.startActivity(intent);
ActivityRizesh.this.finish();



}

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


final TextView txtmatn = (TextView) findViewById(R.id.txtmatn);
final TextView txtback = (TextView) findViewById(R.id.txtback);



Map<String, String> wikiItems = new HashMap<String, String>();

wikiItems.put("لینک", "متن معادل لینک");
wikiItems.put("متن", "متن معادل متن");
wikiItems.put("وسط", "متن معادل وسط");

String content = "سلام این یه لینکه که وسط متن ما اومده ! به افتخار این لینک وسط متن ما";

final SpannableStringBuilder spannable = new SpannableStringBuilder(content);

Iterator<Map.Entry<String, String>> it = wikiItems.entrySet().iterator();

while (it.hasNext()) {

final Map.Entry<String, String> entry = it.next();

int startIndex = content.indexOf(entry.getKey());

if (startIndex == -1) continue;

spannable.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {

txtmatn.setText(entry.getValue());


}
},
startIndex, startIndex + entry.getKey().length(),
0);
}

txtmatn.setMovementMethod(LinkMovementMethod.getInstance());
txtmatn.setText(spannable, TextView.BufferType.SPANNABLE);





txtback.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent(ActivityRizesh.this, ActivityIndex.class);
ActivityRizesh.this.startActivity(intent);
ActivityRizesh.this.finish();

}
});


}



}


 

0 0
همون طور که میبینید من یک دکمه بک نرم افزاری نوشتم ولی این راهش نیست و خودش مشکلاتی رو درست کرده برام . راهش همونه که در داخل onclick این صفحه اینتنت باز کردن صفحه جدید گذاشته بشه و در صفحه جدید هم txtmatn.setText(entry.getValue()); صدا زده بشه که کلا حل بشه . ممنون . (11 سال پیش)
0 0
دوستان کسی جواب رو نمیدونه ؟ (11 سال پیش)
+1 0
دیالوگ هم جالب میشه برای ویکی - الزامی به اکتیویتی جدید که نیست؟ (11 سال پیش)
0 0
حالا دیالوگ رو که تا حالا بهش فکر نکرده بودم و ممنون ولی در مورد سوال بالا آیا نمیشه همون setText(entry.getValue رو که کلید حل این ماجراست استاتیک نوشت که با همون اکتیویتی تمومش بکنیم ؟ راه اصلیش هم همونه ضمن اینکه ۹۵ درصد کارش حل شده قربونت برم اگر بتونی ۵ دقیقه از وقت شریفت رو به من بدی یک استاتیک میسازیم و تموم . اگر نشد دیگه باید برم شراغ دیالوگ ولی اون هم یک مشکلی که داره اینه که متن هر کدوم از لینکها خیلی طولانیه حتی بعضیش از خود این اکتیویتی طولانی تر به همین دلیل نمیخام تا مجبور نشدم برم سراغ دیالوگ . ممنون محمد جان دیگه آخراشه ! (11 سال پیش)
0 0
البته اگر راه جدیدی به نظر دوستان برسه یا همون دیالوگ بتونه یک متن طولانی رو که گفتم از خود اکتیویتی اول بزرگتره ساپورت کنه اون راه میریم ولی خوب گفتم ۹۵ درصد این راه رو رفتیم ! ممنون از همه دوستانی که کمک می کنن. (11 سال پیش)
0 0
شما میتونی برای دکمه بک کد بنویسی و خودش نره اکتیویتی قبل . بعد یک آرایه میذاری و هر دفعه که میری جلو یک خونه بهش اضافه میکنه و هر دفعه که میای عقب خونه آخر را بر میداری (استک) و حالت صفحه قبل شبیه سازی میشه تا جایی که برسی به اول استک ، اون موقع اکتیویتی قبلی را میاری (11 سال پیش)
پاسخ به سوال 
محمد حسین زاده  11 سال پیش
+4 0

برای جلوگیری از دست به دامن استاتیک شدن میشه از یه دیالوگ استفاده کرد، البته امکانش به شرایط برنامه بر میگرده

کد مناسب دیالوگ برای اکتیویتی :

 public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.main);

TextView textView = (TextView) findViewById(R.id.textView);
final WikiDialog wikiDialog = new WikiDialog(this);
Map<String, String> wikiItems = new HashMap<String, String>();

wikiItems.put("لینک", "لینک---");
wikiItems.put("متن", "متن--");
wikiItems.put("وسط", "وسط--");

String content = "سلام این یه لینکه که وسط متن ما اومده ! به افتخار این لینک وسط متن ما";
final SpannableStringBuilder spannable = new SpannableStringBuilder(content);

Iterator<Map.Entry<String, String>> it = wikiItems.entrySet().iterator();

while (it.hasNext()) {

final Map.Entry<String, String> entry = it.next();
int startIndex = content.indexOf(entry.getKey());
while (startIndex != -1) {
spannable.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {

wikiDialog.init(entry.getValue());
}
}, startIndex, startIndex + entry.getKey().length(), 0);

startIndex = content.indexOf(entry.getKey(), startIndex + 1);
}
}
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setText(spannable, TextView.BufferType.SPANNABLE);
}
}

پاسخ به سوال 
محمد حسین زاده  11 سال پیش
+4 0

تو کد بالا از یه دیالوگ سفارشی استفاده شده که عنوان نداره - یه دکمه برای بستنش هست - محتویاتش اسکرول میشه , متنش قابل تغییره :

 public class WikiDialog extends Dialog {

private TextView textView;

public WikiDialog(Context context) {

super(context);
initialize();
}

public WikiDialog(Context context, int theme) {

super(context, theme);
initialize();
}

protected WikiDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {

super(context, cancelable, cancelListener);
initialize();
}

private void initialize() {
setCanceledOnTouchOutside(true);

textView = new TextView(G.context);
textView.setGravity(Gravity.CENTER);
textView.setTextColor(Color.BLACK);
textView.setLineSpacing(0, 1.5F);

Button button = new Button(G.context);
button.setText("بازگشت");
button.setTextColor(Color.WHITE);
button.setBackgroundColor(Color.GRAY);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});

LinearLayout linearLayout = new LinearLayout(G.context);
linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.addView(textView);
linearLayout.addView(button);
linearLayout.setGravity(Gravity.CENTER);

ScrollView scrollView=new ScrollView(G.context);
scrollView.setPadding(30, 30, 30, 30);
scrollView.addView(linearLayout);
scrollView.setBackgroundColor(Color.WHITE);

getWindow().requestFeature(Window.FEATURE_NO_TITLE);
setContentView(scrollView);
}

public void init(String text) {
textView.setText(text);
show();
}
}
0 0
پس بالاخره مشکل ما رو حل کردی محمد جان ! دستت درد نکنه . خدا حفظت کنه قربونت برم . خوب دوستان دیگه ویکیمون از این روش تکمیل شد ولی اگر دوستان روش های دیگه ای هم دارن استقبال می کنیم و شیوه ای که بیشتر مورد استقبال خود من بشخصه هست همون باز کردن مطالب مربوط به لینک ها در یک اکتیویتی جداست که دستمون هم بازتر باشه . بزم ممنون محمد جان . (11 سال پیش)
0 0
ولی مهدی جان برادرانه - این روش کار، خوب و مناسب نیست - اول برنامه نویس شو بعد برنامه بنویس. اینطوری برای هر پروژه ای تو یه چیزیش میمونی - ضمنا پروژه هات اصلا ساختار خوبی ندارن - 6 ماه میگذره واسه یکیشون بخوای آپدیت بدی کلا یادت میره چی به چی بوده (11 سال پیش)
0 0
ممنون از محمد عزیز و همین طور از ارزیابی پروژه با وجود مشغله های های زیادی که داره . ولی در لایه های زیرین کلامت کمی ناراحتی احساس میکنم !گفتم شاید بخاطر جمله ای باشه که بالا نوشتم ( پس بالاخره مشکل ما رو حل کردی محمد جان !) . ولی من واقعا تو رو دوست دارم خودت هم میدونی . اصلا ما چند نفر مثل تو توی ایران داریم که بیایم ناراحتشون هم بکنیم قربونت برم ؟ البته اگر ناراحت شده باشی ! ولی در هر صورت منظور من از جمله بالا این بود که بالاخره تنها کسی که تونست با پیگیری های مستمر تا آخر مشکل ما رو حل کنه تو بودی ! حد اقل تا این لحظه ! چون یکی دیگه از بچه ها هم داره روش کار میکنه . در مورد برنامه هم که خوب تو به عنوان یک برنامه نویس حرفه ای داری نگاه میکنی مسلما حرفت هم درسته ولی ما اوایل اندروید هستیم برادر ! ضمنا برای برنامه نویس شدن مگر راهی بهتر از برنامه نویسی و در دست گرفتن پروژه های واقعی و در گیر شدن در متن کار هم سراغ داری ؟ به نظرم بهترین و کوتاه ترین مسیر برای یادگیری شنا زدن به آبه و الا هیچ وقت تو ساحل نمیشه شنا یاد گرفت . در مورد اینی هم که گفتم من روش ساخت اکتویتی رو بیشتر می پسندم به این دلیله که اونطوری تمام صفحه میشه و برای متون طولانی بهترعمل میکنه و از همه قابلیتهای یک اکتیویتی که فراتر از دیالوگه میشه درش استفاده کرد ولی البته اگر بنا به استفاده از جملات کوتاه باشه روش شما خلاصه تر و بهتره . در هر صورت ما دوست داریمت محمد جان خیلی :) (11 سال پیش)
0 0
نه مهدی جان لایه نداشت - چیزی هم که میگم وظیفس - ولی راه این نیست که برنامه بنویسی و پروژه واقعی دست بگیری - این 2 تا راهکار برای با تجربه شدنه - یعنی ساختار رو بلدی ، میشناسی حالا میای برای پخته شدن کد وارد یه پروژه میشی، کارشناسی ارشد الهیات داری منم با رشتت آشنا نیستم ولی خداییش تا مفاهیم پایه رو بلد نباشی میری سخنرانی کنی برای یه جمع؟ یا بلد بودی بعدش برای تسلط از جمع های آشنا و کوچیک شروع میکنی (شرمنده اگه مثالش به رشتت بی ربطه) - نظر من همیشه این بوده که تئوری رو باد بگیریم برای کسب تجربه پروژه دست بگیریم - در مورد روش هم بحثی نیست، اگه قرار باشه همه یه روش رو انتخاب کنن که همه برنامه های هم موضوع عین هم میشدن - مثل منم دست کم هزار تایی تو ایران هست - هنوز مونده تا یونیک بشیم :) خلاصه ارادتمندم و راضی نبودم اینهمه تایپ کنی هر جایی هم که مشکلی باشه در خدمتم ! (11 سال پیش)
0 0
چون استاد شمایی حتما همینطوره دیگه ! ارادت از ماست . (11 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .